MENU

【備忘録】【docker】バージョンアップしたらRailsが起動しなくなった問題:bundler: failed to load command: rails (/usr/local/bundle/bin/rails)

★環境
 ベースOS:macOS Monterey 12.4
 システムオンチップ:Apple M1
 仮想コンテナ:Docker Desktop 4.3.2 -> 4.9.0
 Ruby:3.1.0
 Rails:6.1.4.6

目次

エラーが発生した背景

「Docker Desktop」のバージョンアップを実施しました。

バージョンアップ後に既存のrailsアプリを「docker-compose up」で起動したら、エラーが発生して起動しなくなりました。

dockerの起動エラー

user@user-Book-Air dk-r6_bugs-cookthings % docker-compose up 
[+] Running 2/0
 ⠿ Container dk-r6_rails-app-web-1  Created                          0.0s
 ⠿ Container dk-r6_rails-app-db-1   Created                          0.0s
Attaching to dk-r6_rails-app-db-1, dk-r6_rails-app-web-1
dk-r6_rails-app-web-1  | bundler: failed to load command: rails (/usr/local/bundle/bin/rails)
dk-r6_rails-app-web-1  | /usr/local/lib/ruby/3.1.0/bundler/definition.rb:489:in `materialize': Could not find rails-6.1.4.6, pg-1.3.2, puma-4.3.11, image_processing-1.12.1, cloudinary-1.22.0, active_storage_validations-0.9.6, bootsnap-1.10.3, capybara-3.36.0, selenium-webdriver-4.1.0, rails-i18n-7.0.2, mini_portile2-2.7.1, actioncable-6.1.4.6, actionmailbox-6.1.4.6, actionmailer-6.1.4.6, actionpack-6.1.4.6, actiontext-6.1.4.6, actionview-6.1.4.6, activejob-6.1.4.6, activemodel-6.1.4.6, activerecord-6.1.4.6, activestorage-6.1.4.6, activesupport-6.1.4.6, railties-6.1.4.6, msgpack-1.4.5, nokogiri-1.13.1-aarch64-linux, rack-2.2.3, regexp_parser-2.2.1, concurrent-ruby-1.1.9, sprockets-4.0.2, http-cookie-1.0.4, public_suffix-4.0.6, loofah-2.14.0, unf_ext-0.0.8 in any of the sources (Bundler::GemNotFound)
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/definition.rb:190:in `specs'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/definition.rb:238:in `specs_for'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/runtime.rb:18:in `setup'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler.rb:151:in `setup'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/setup.rb:20:in `block in <top (required)>'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/ui/shell.rb:136:in `with_level'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/ui/shell.rb:88:in `silence'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/setup.rb:20:in `<top (required)>'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:56:in `require_relative'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:56:in `kernel_load'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/cli/exec.rb:23:in `run'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:484:in `exec'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:31:in `dispatch'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/cli.rb:25:in `start'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/gems/3.1.0/gems/bundler-2.3.3/libexec/bundle:48:in `block in <top (required)>'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/3.1.0/bundler/friendly_errors.rb:103:in `with_friendly_errors'
dk-r6_rails-app-web-1  | 	from /usr/local/lib/ruby/gems/3.1.0/gems/bundler-2.3.3/libexec/bundle:36:in `<top (required)>'
dk-r6_rails-app-web-1  | 	from /usr/local/bin/bundle:25:in `load'
dk-r6_rails-app-web-1  | 	from /usr/local/bin/bundle:25:in `<main>'
dk-r6_rails-app-web-1 exited with code 1
dk-r6_rails-app-db-1   | 
dk-r6_rails-app-db-1   | PostgreSQL Database directory appears to contain a database; Skipping initialization
dk-r6_rails-app-db-1   | 
dk-r6_rails-app-db-1   | 2022-06-06 14:11:13.469 JST [1] LOG:  starting PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on aarch64-unknown-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
dk-r6_rails-app-db-1   | 2022-06-06 14:11:13.469 JST [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
dk-r6_rails-app-db-1   | 2022-06-06 14:11:13.469 JST [1] LOG:  listening on IPv6 address "::", port 5432
dk-r6_rails-app-db-1   | 2022-06-06 14:11:13.473 JST [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
dk-r6_rails-app-db-1   | 2022-06-06 14:11:13.492 JST [27] LOG:  database system was shut down at 2022-06-06 14:10:51 JST
dk-r6_rails-app-db-1   | 2022-06-06 14:11:13.522 JST [1] LOG:  database system is ready to accept connections
^CGracefully stopping... (press Ctrl+C again to force)
[+] Running 2/2
 ⠿ Container dk-r6_rails-app-web-1  Stopped                          0.0s
 ⠿ Container dk-r6_rails-app-db-1   Stopped                          0.2s
canceled

<原因>不明だが、バージョンアップでpathがおかしくなった?

原因の特定はできませんでした。

ただ、以下2つのコマンドを実行すると違いが出ました。

実行:docker-compose run –rm web ruby -v

ruby 3.1.0p0 (2021-12-25 revision fb4df44d16) [aarch64-linux]

実行:docker-compose run –rm web rails -v

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

rubyコマンドが実行できても、railsコマンドが実行できない事が分かります。

だとするなら、railsコマンドが通るようにパスを通せばOK?と思い、まずパスを確認しました。

実行:docker-compose run –rm web which bundle

/usr/local/bin/bundle

特におかしいパスを見つけられませんでした。

<解決>コンテナを再構築する

もしかしたら他に変更すべきパスがあるのかもしれませんが、時間もないので、コンテナの再構築をしました。

手順は以下の通りです。

  1. dockerのコンテナとイメージを削除する
  2. railsアプリの「Gemfile.lock」を削除する
  3. Dockerファイル群のある「Gemfile.lock」空にする
  4. Dockerファイル群のある「Gemfile」を最新のrailsアプリの「Gemfile」に上書き
  5. dockerの再構築:実行コマンド「docker-compose build –no-cache」
  6. dockerの実行:実行コマンド「docker-compose up」

上記手順で起動させる事ができました。

手順2と3は、もしかしたら飛ばせる?かもしれませんが、少なくとも手順4は実行しないと同じエラーになりました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次