dockerで環境構築を行いgemの追加をした際にエラーが発生しましたので
備忘録として情報共有しようと思います!
#開発環境
docker
rails (5.2.0)
ruby (2.7.1)
mysql (5.7)
nginx
puma
※docker-compose buildでgemの更新をしますが時間がかかるので下記の記事を参考に
gemの更新を素早くする設定をしています。
https://qiita.com/neko-neko/items/abe912eba9c113fd527e
#エラー内容
Gemfileでdeviseのgemを追加し、docker-compose run --rm rails bundle installをしたところ以下のエラーが発生
~ RailsApp % docker-compose run --rm rails bundle install
Starting railsapp_db_1 ... done
Fetching gem metadata from https://rubygems.org/.............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies....
Bundler could not find compatible versions for gem "railties":
In snapshot (Gemfile.lock):
railties (= 5.2.4.3)
In Gemfile:
devise (= 4.1.0) was resolved to 4.1.0, which depends on
railties (< 5.1, >= 4.1.0)
rails (~> 5.2.2) was resolved to 5.2.4.3, which depends on
railties (= 5.2.4.3)
Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
何が原因なのかわからなかったが、とりあえず「bundle updateしたら解決するかもよ」と書いてあったので
docker-compose run --rm rails bundle updateを実行
↓↓↓↓↓↓↓↓
~ RailsApp % docker-compose run --rm rails bundle update
Starting railsapp_db_1 ... done
Fetching gem metadata from https://rubygems.org/.............
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...........................
Bundler could not find compatible versions for gem "railties":
In snapshot (Gemfile.lock):
railties (= 5.2.4.3)
In Gemfile:
devise (= 4.1.0) was resolved to 4.1.0, which depends on
railties (< 5.1, >= 4.1.0)
rails (~> 5.2.2) was resolved to 5.2.4.3, which depends on
railties (= 5.2.4.3)
ダメでしたね・・・
#原因
結論から申し上げるとdeviseというgemがlistにないことがエラーの原因だったみたいです。
下記の記事を参考にさせていただきました。
https://qiita.com/hatorijobs/items/2928e152f22d009b07d0
こちらの記事をそのまま実行すれば解決しますが、dockerで作業している方は若干、コマンドが
異なりますのでこちらで説明させていただこうと思います。
対処方法
以下の順に操作をしていきます。
1. docker-compose exec [任意サービス名] gem list でGemの一覧を確認し、deviseのgemがないことを確認する。
2. docker-compose exec [任意サービス名] gem install devise でdeviseをインストールする。
3. もう一度docker-compose exec [任意のサービス名] gem list でGemの一覧を確認し、devise(4.7.2)があることを確認する。
4. Gemfileに**gem 'devise','4.7.2'を記述する
5. docker-compose run --rm rails bundle updateを実行
順番に見ていきましょう。
↓↓↓↓↓↓↓↓
1. docker-compose exec [任意サービス名] gem list でGemの一覧を確認し、deviseのgemがないことを確認する。
~ RailsApp % docker-compose exec app gem list
*** LOCAL GEMS ***
actioncable (5.2.4.3, 5.2.2)
actionmailer (5.2.4.3, 5.2.2)
actionpack (5.2.4.3, 5.2.2)
actionview (5.2.4.3, 5.2.2)
actionjob (5.2.4.3, 5.2.2)
~省略~
web-console (3.7.0)
2. docker-compose exec [任意サービス名] gem install devise でdeviseをインストールする。
~ RailsApp % docker-compose exec app gem install devise
Fetching warden-1.2.8.gem
Fetching bcrypt-3.1.13.gem
~省略~
Successfully installed devise-4.7.2
5 gems installed
3. もう一度docker-compose exec [任意のサービス名] gem list でGemの一覧を確認し、devise(4.7.2)があることを確認する。
~ RailsApp % docker-compose exec app gem list
*** LOCAL GEMS ***
actioncable (5.2.4.3, 5.2.2)
actionmailer (5.2.4.3, 5.2.2)
actionpack (5.2.4.3, 5.2.2)
actionview (5.2.4.3, 5.2.2)
actionjob (5.2.4.3, 5.2.2)
~省略~
devise (4.7.2)
~省略~
web-console (3.7.0)
4. Gemfileにgem 'devise','4.7.2'を記述する
source 'https://rubygems.org'
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.0', '>= 5.0.2.1'
# Use mysql as the database for Active Record
gem 'mysql2', '>= 0.3.18', '< 0.5'
# Use Puma as the app server
~省略~
#ログイン機能の追加
gem 'devise','4.7.2'
~省略~
5. docker-compose run --rm rails bundle updateを実行
~ RailsApp % docker-compose run --rm rails bundle update
これでエラーが出なければ我々の勝ちです
#気づいたこと
エラー対応している際に気づいたことがいくつかあったので共有させていただきます
docker-compose exec app gem install deviseを実行すると最新版のgemがインストールされます。
最新版でも特に問題ないと判断したため、バージョン指定する方法の説明は省略させていただきました。
※逆に方法がわかる方は教えてください!
ちなみにdeviseの全バージョン履歴が掲載されたサイトを見つけましたのでURLを連携させていただきます。
https://rubygems.org/gems/devise/versions
※2020.06.10時点での最新バージョンは4.7.2
[任意のサービス名]とはdocker-compose.ymlで指定しているサービス名のことです。
任意で決めることができますが、どのサイトでもdbとかappとかwebて設定している方が多い印象です。
※わからないて方は、「docker-compose.yml サービス名」で調べると記事がヒットすると思います。
#終わりに
Railsやdockerについては今後もアウトプットのためにエラーに関する記事等を定期的に投稿していこうと思っております。
また、初めての投稿で至らない点があったかと思いますが、最後まで読んでいただきありがとうございました!!!
以上