为什么 "bundle install --path" 在 "bundle install" 工作时中断?
Why does "bundle install --path" break when "bundle install" works?
`require': LoadError: cannot load such file -- mysql2/mysql2
(Sequel::AdapterNotFound)
我只有在使用 bundle install --path
时才会出现上述错误。当我切换到常规 bundle install
时一切正常。
在用头撞墙几个小时之后,我想是时候寻求帮助了。我如何让 bundle install --path
工作?我假设它与 docker 容器中的捆绑环境有关?
这个包 env 有效:
Environment
Bundler 1.13.6
Rubygems 2.6.8
Ruby 2.3.2p217 (2016-11-15 revision 56796) [x86_64-linux]
GEM_HOME /usr/local/bundle
GEM_PATH
Git 2.1.4
Bundler settings
disable_shared_gems
Set for your local app (/usr/local/bundle/config): "true"
path
Set via BUNDLE_PATH: "/usr/local/bundle"
bin
Set via BUNDLE_BIN: "/usr/local/bundle/bin"
silence_root_warning
Set via BUNDLE_SILENCE_ROOT_WARNING: "1"
app_config
Set via BUNDLE_APP_CONFIG: "/usr/local/bundle"
bin_path
Set via BUNDLE_BIN_PATH: "/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/exe/bundle"
gemfile
Set via BUNDLE_GEMFILE: "/usr/src/app/Gemfile"
这个包 env 不工作:
Environment
Bundler 1.13.6
Rubygems 2.6.8
Ruby 2.3.2p217 (2016-11-15 revision 56796) [x86_64-linux]
GEM_HOME /usr/src/app/vendor/bundle/ruby/2.3.0
GEM_PATH
Git 2.1.4
Bundler settings
path
Set for your local app (/usr/local/bundle/config): "vendor/bundle"
Set via BUNDLE_PATH: "/usr/local/bundle"
disable_shared_gems
Set for your local app (/usr/local/bundle/config): "true"
bin
Set via BUNDLE_BIN: "/usr/local/bundle/bin"
silence_root_warning
Set via BUNDLE_SILENCE_ROOT_WARNING: "1"
app_config
Set via BUNDLE_APP_CONFIG: "/usr/local/bundle"
bin_path
Set via BUNDLE_BIN_PATH: "/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/exe/bundle"
gemfile
Set via BUNDLE_GEMFILE: "/usr/src/app/Gemfile"
Dockerfile:
FROM ruby:2.3.2
WORKDIR /usr/src/app
COPY Gemfile .
RUN bundle install --path vendor/bundle
docker-compose.yml:
version: "2"
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/usr/src/app
links:
- db
db:
image: mysql:5.6
ports:
- "3306:3306"
volumes:
- ./schema/create_markup.sql:/docker-entrypoint-initdb.d/create_markup.sql
- db_data:/var/lib/mysql
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
volumes:
db_data:
Gemfile:
# frozen_string_literal: true
source "https://rubygems.org"
gem "mysql2"
gem "sequel"
group :test do
gem "rspec"
end
这是由您的 docker-compose.yml
的以下行引起的:
volumes:
- .:/usr/src/app
gems 安装在 /usr/src/app/vendor/bundle
下,但您正在将当前目录安装到 docker-compose.yml
中的 /usr/src/app
。所以你看不到图片中的宝石。
您需要更改包路径或装载路径。
`require': LoadError: cannot load such file -- mysql2/mysql2 (Sequel::AdapterNotFound)
我只有在使用 bundle install --path
时才会出现上述错误。当我切换到常规 bundle install
时一切正常。
在用头撞墙几个小时之后,我想是时候寻求帮助了。我如何让 bundle install --path
工作?我假设它与 docker 容器中的捆绑环境有关?
这个包 env 有效:
Environment
Bundler 1.13.6
Rubygems 2.6.8
Ruby 2.3.2p217 (2016-11-15 revision 56796) [x86_64-linux]
GEM_HOME /usr/local/bundle
GEM_PATH
Git 2.1.4
Bundler settings
disable_shared_gems
Set for your local app (/usr/local/bundle/config): "true"
path
Set via BUNDLE_PATH: "/usr/local/bundle"
bin
Set via BUNDLE_BIN: "/usr/local/bundle/bin"
silence_root_warning
Set via BUNDLE_SILENCE_ROOT_WARNING: "1"
app_config
Set via BUNDLE_APP_CONFIG: "/usr/local/bundle"
bin_path
Set via BUNDLE_BIN_PATH: "/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/exe/bundle"
gemfile
Set via BUNDLE_GEMFILE: "/usr/src/app/Gemfile"
这个包 env 不工作:
Environment
Bundler 1.13.6
Rubygems 2.6.8
Ruby 2.3.2p217 (2016-11-15 revision 56796) [x86_64-linux]
GEM_HOME /usr/src/app/vendor/bundle/ruby/2.3.0
GEM_PATH
Git 2.1.4
Bundler settings
path
Set for your local app (/usr/local/bundle/config): "vendor/bundle"
Set via BUNDLE_PATH: "/usr/local/bundle"
disable_shared_gems
Set for your local app (/usr/local/bundle/config): "true"
bin
Set via BUNDLE_BIN: "/usr/local/bundle/bin"
silence_root_warning
Set via BUNDLE_SILENCE_ROOT_WARNING: "1"
app_config
Set via BUNDLE_APP_CONFIG: "/usr/local/bundle"
bin_path
Set via BUNDLE_BIN_PATH: "/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.13.6/exe/bundle"
gemfile
Set via BUNDLE_GEMFILE: "/usr/src/app/Gemfile"
Dockerfile:
FROM ruby:2.3.2
WORKDIR /usr/src/app
COPY Gemfile .
RUN bundle install --path vendor/bundle
docker-compose.yml:
version: "2"
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/usr/src/app
links:
- db
db:
image: mysql:5.6
ports:
- "3306:3306"
volumes:
- ./schema/create_markup.sql:/docker-entrypoint-initdb.d/create_markup.sql
- db_data:/var/lib/mysql
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
volumes:
db_data:
Gemfile:
# frozen_string_literal: true
source "https://rubygems.org"
gem "mysql2"
gem "sequel"
group :test do
gem "rspec"
end
这是由您的 docker-compose.yml
的以下行引起的:
volumes:
- .:/usr/src/app
gems 安装在 /usr/src/app/vendor/bundle
下,但您正在将当前目录安装到 docker-compose.yml
中的 /usr/src/app
。所以你看不到图片中的宝石。
您需要更改包路径或装载路径。