2017-01-17 15 views
1

`require': LoadError: cannot load such file -- mysql2/mysql2 (Sequel::AdapterNotFound)"bundle install"が動作するときに "bundle install --path"が壊れるのはなぜですか?

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'にありますが、'/usr/src/app/vendor/bundle'に宝石がインストールされている必要があります。その場合、私は何をマウントしますか。 'コピーする。 Dockerfileの/ usr/src/app'が動作しない – binarymason

+0

私の意見では、アプリケーションごとにイメージを構築する場合、バンドルパスを設定する必要はありません。しかし、 '/ usr/src/app/vendor/bundle'に宝石をインストールする場合は、マウントした後にinstallをバンドルし、gemをホストに保存することができます。 – minamijoyo

関連する問題