質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

3442閲覧

docker環境で開発する際のGemfile変更について

Harluz

総合スコア19

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2020/09/11 05:13

Ruby on Railsにてポートフォリオを作成中
Rspecにてモデルのテストを作成する際に、Faker gemを導入したくGemfileに追加し、bundle install を実行し、無事インストールが完了する。
その後に、docker-compose run app(コンテナ名) rspec を実行すると

Could not find faker-2.13.0 in any of the sources
Run bundle install to install missing gems.

と表示され、コンテナ内のGemfile.lockが更新されていないのでは?と思い
docker-compose run app bundle installを実行し、こちらもインストール完了
再度、docker-compose run app rspecを実行するも、

Could not find faker-2.13.0 in any of the sources
Run bundle install to install missing gems.

と同じエラーが出る。
表題の通り、docker環境で、gemfileを変更する仕方が分かりません。

参考に、コード等を下記に示します。

Gemfile

source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.6.3' gem 'rails', '~> 5.2.4', '>= 5.2.4.3' gem 'bcrypt' gem 'mysql2', '>= 0.4.4', '< 0.6.0' gem 'puma', '~> 3.11' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.2' gem 'bootsnap', '>= 1.1.0', require: false gem 'bootstrap', '~> 4.1.1' gem 'jquery-rails' gem 'faker' group :development, :test do gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'rspec-rails', '~> 3.7' gem 'rails-controller-testing' gem 'factory_bot_rails', '~> 4.11' end group :development do gem 'web-console', '>= 3.3.0' gem 'listen', '>= 3.0.5', '< 3.2' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' gem 'spring-commands-rspec' end group :test do gem 'capybara', '>= 2.15' gem 'selenium-webdriver' gem 'chromedriver-helper' gem 'webdrivers' end gem 'devise' gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] group :development, :staging do gem 'rubocop', '~> 0.82.0', require: false end group :production do gem 'puma_worker_killer' end

Dockerfile

FROM ruby:2.6.3 # リポジトリを更新し依存モジュールをインストール RUN apt-get update -qq && \ apt-get install -y build-essential \ nodejs # ルート直下にmy_appという名前で作業ディレクトリを作成(コンテナ内のアプリケーションディレクトリ) RUN mkdir /my_app WORKDIR /my_app # ホストのGemfileとGemfile.lockをコンテナにコピー ADD Gemfile /my_app/Gemfile ADD Gemfile.lock /my_app/Gemfile.lock # bundle installの実行 RUN bundle install # ホストのアプリケーションディレクトリ内をすべてコンテナにコピー ADD . /my_app # puma.sockを配置するディレクトリを作成 RUN mkdir -p tmp/sockets

docker-compose run app bundle install時のメッセージ

Warning: the running version of Bundler (1.17.2) is older than the version that created the lockfile (1.17.3). We suggest you upgrade to the latest version of Bundler by running `gem install bundler`.

docker-compose run app rspec時のメッセージ

Could not find faker-2.13.0 in any of the sources Run `bundle install` to install missing gems.

その他確認したいコード等がございましたら、コメントにて記述の方をお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

イメージの再ビルドを行うと改善するのではないでしょうか?:

console

1docker-compose build

docker run コマンドは現在のイメージから新規コンテナーを起動するので、
Gemfile.lock を更新しても Ruby gem 自体はコンテナーにインストールされ
イメージにはインストールされません

投稿2020/09/11 07:39

y_shinoda

総合スコア3272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Harluz

2020/09/12 05:13 編集

buildを実行した結果、動作するようになりました。 因みに、docker-compose up -dをすれば解決すると思い実行したのですが、うまく動作しなかった経緯があります。 これはどのような現象なのでしょうか? よろしければ、ご回答をお願いします
y_shinoda

2020/09/12 08:35

docker-compose up や docker-compose run は 完成したイメージが存在しないときのみビルドを行います 一度完成したイメージが作成されれば、 イメージの作成に関係するファイルの内容を更新したとしても 再ビルドは行わず、既に完成したイメージを引き続き利用します また、docker-compose up で起動したコンテナーを操作する場合は docker-compose exec を使います docker-compose run は起動しているコンテナーとは別に 新規コンテナーを起動してコマンドを実行し コマンド終了と同時に新規コンテナーも停止します
Harluz

2020/09/12 13:04

前回に引き続き、回答及び分かりやすい解説をありがとうございます。 upコマンドについては常時、再ビルドから起動まで実行する便利コマンドだと勘違いしておりました。 勉強不足で恐縮ですが、大変勉強になり1mm位の進歩ですが、着実にDockerに対する知識が蓄積しております。 今回もありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問