Dcoker + Railsな環境でRSpecのセットアップで困った話
あれこれ思惑していて、電車の中でハッと思いついたちょっとした挙動を確認したくて、RSpec + Factorybotな環境が欲しくなりました。
そこで、手元のDockerなRails環境でGemfileをぺぺっと直してrspecやらfactorybotやらを追加して、RSpec環境の初期化をするべくdocker-compose run web rails g rspec:installしてみたのですが、ただひたすらに怒られる状態になってしまいました。
code: bash
Traceback (most recent call last):
22: from /usr/local/bundle/gems/spring-2.0.2/bin/spring:49:in `<main>'
21: from /usr/local/bundle/gems/spring-2.0.2/lib/spring/client.rb:30:in `run'
20: from /usr/local/bundle/gems/spring-2.0.2/lib/spring/client/command.rb:7:in `call'
19: from /usr/local/bundle/gems/spring-2.0.2/lib/spring/client/server.rb:9:in `call'
18: from /usr/local/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'
17: from /usr/local/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'
16: from /usr/local/bundle/gems/spring-2.0.2/lib/spring/server.rb:9:in `<top (required)>'
15: from /usr/local/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'
14: from /usr/local/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'
13: from /usr/local/bundle/gems/spring-2.0.2/lib/spring/commands.rb:4:in `<top (required)>'
12: from /usr/local/bundle/gems/spring-2.0.2/lib/spring/commands.rb:33:in `<module:Spring>'
11: from /usr/local/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'
10: from /usr/local/lib/ruby/site_ruby/2.5.0/rubygems/core_ext/kernel_require.rb:54:in `require'
9: from /usr/local/lib/ruby/site_ruby/2.5.0/bundler/setup.rb:20:in `<top (required)>'
8: from /usr/local/lib/ruby/site_ruby/2.5.0/bundler.rb:107:in `setup'
7: from /usr/local/lib/ruby/site_ruby/2.5.0/bundler/runtime.rb:20:in `setup'
6: from /usr/local/lib/ruby/site_ruby/2.5.0/bundler/runtime.rb:108:in `block in definition_method'
5: from /usr/local/lib/ruby/site_ruby/2.5.0/bundler/definition.rb:226:in `requested_specs'
4: from /usr/local/lib/ruby/site_ruby/2.5.0/bundler/definition.rb:237:in `specs_for'
3: from /usr/local/lib/ruby/site_ruby/2.5.0/bundler/definition.rb:170:in `specs'
2: from /usr/local/lib/ruby/site_ruby/2.5.0/bundler/spec_set.rb:85:in `materialize'
1: from /usr/local/lib/ruby/site_ruby/2.5.0/bundler/spec_set.rb:85:in `map!'
/usr/local/lib/ruby/site_ruby/2.5.0/bundler/spec_set.rb:91:in `block in materialize': Could not find concurrent-ruby-1.1.5 in any of the sources (Bundler::GemNotFound)
最初はdatabase-cleanerが不足していると言われたので、それを修正した所上記のエラーメッセージに変わったというのも、原因究明が遅れた一員かもしれません。
(多分、読み込みの順番でたまたま解消したように見えていただけなんだと思います)
足りないと言われるパッケージをGemfileに追加したり、install pathを指定してdocker-compose run web bundle install --path vendor/cacheとかやってみたり、bundlerの更新をやってみたり……ネット上を探して出てくる対策を一通りやってみても全く効果なし。
先の通り、エラーメッセージが変化したこともあって、当初はDocker環境だから何か特別なことをしないといけない意識がなく、普通のRailsのコマンドをdocker-composeに続けて打ち込み、Rails周りの設定ファイルを見直して……というのを試していたんですが、20分ぐらいかかってようやっとGemfile修正後にdocker-compose buildが必要なことに気づきました。
これを実行した所、すんなり問題は解消。Gemfileの修正は環境の修正に相当するのでdocker-compose buildで再構築が必要だってことなんだろうと納得することにしました。
エラーメッセージには微塵もそのへんの問題が感じられないので、使い続けていないと難しいなあと思った次第です。
本来やりたかった事の方は、一通り環境を整えてからまた時間をみつけてやります。