2017-01-17 147 views
1

`require': LoadError: cannot load such file -- mysql2/mysql2 (Sequel::AdapterNotFound)“捆绑安装”工作时,为什么“捆绑安装 - 路径”中断?

只有当我使用bundle install --path时,我才会收到上述错误。当我切换到正常bundle install一切都完美的作品。

在我的头靠在墙上打了太多时间之后,我认为是时候寻求帮助了。我如何获得bundle install --path的工作?我认为它与码头集装箱内的捆绑环境有关?


这个捆绑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 

泊坞窗,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

volumes: 
    - .:/usr/src/app 

的宝石:

# frozen_string_literal: true 
source "https://rubygems.org" 

gem "mysql2" 
gem "sequel" 

group :test do 
    gem "rspec" 
end 

回答

1

这是由下面这行你docker-compose.yml造成安装在下,但是您将当前目录挂载到docker-compose.yml中的/usr/src/app。所以你看不到图像中的宝石。

您需要更改束路径或安装路径。

+0

我的应用程序位于'/ usr/src/app'目录下,但是要将gem安装到'/ usr/src/app/vendor/bundle'目录下。在这种情况下,我要装载什么。有'COPY。 Dockerfile中的/ usr/src/app'不起作用 – binarymason

+0

在我看来,如果为每个应用程序构建一个映像,则不需要设置bundle路径。但是如果你想把gem安装到'/ usr/src/app/vendor/bundle'中,你可以在安装之后绑定安装并将gem保存在主机上。 – minamijoyo