Techioz Blog

新しい Heroku スタックで動作するように Ruby on Rails アプリを更新する

概要

私は 1 年以上前に Ruby on Rails アプリに取り組んでいましたが、当初は Heroku Stack 18 で実行するように設定されていましたが、現在は廃止されていることが分かりました。そのアプリを新しいスタックで再度動作させようとしていますが、プッシュアップしようとするたびに、Ruby バージョン (2.5.1) が存在しないことが表示されます。プロジェクトを最初から再度作成する必要がないように、Ruby/Rails のバージョンをアップグレードする方法についての洞察が欲しいです。前もって感謝します。

Heroku リモートへのプッシュを実行すると、次の出力が得られます。

Preparing app for Rails asset pipeline
remote:        Running: rake assets:precompile
remote:        rake aborted!
remote:        ArgumentError: wrong number of arguments (given 3, expected 2)
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/actionpack-5.2.8.1/lib/action_dispatch/middleware/static.rb:111:in `initialize'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/actionpack-5.2.8.1/lib/action_dispatch/middleware/stack.rb:37:in `new'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/actionpack-5.2.8.1/lib/action_dispatch/middleware/stack.rb:37:in `build'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/actionpack-5.2.8.1/lib/action_dispatch/middleware/stack.rb:101:in `block in build'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/actionpack-5.2.8.1/lib/action_dispatch/middleware/stack.rb:101:in `each'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/actionpack-5.2.8.1/lib/action_dispatch/middleware/stack.rb:101:in `inject'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/actionpack-5.2.8.1/lib/action_dispatch/middleware/stack.rb:101:in `build'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/engine.rb:510:in `block in app'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/engine.rb:506:in `synchronize'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/engine.rb:506:in `app'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/application/finisher.rb:47:in `block in <module:Finisher>'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/initializable.rb:32:in `instance_exec'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/initializable.rb:32:in `run'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/initializable.rb:61:in `block in run_initializers'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/initializable.rb:60:in `run_initializers'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/application.rb:361:in `initialize!'
remote:        /tmp/build_fbf58a0c/config/environment.rb:5:in `<main>'
remote:        <internal:/tmp/build_fbf58a0c/vendor/ruby-3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
remote:        <internal:/tmp/build_fbf58a0c/vendor/ruby-3.2.2/lib/ruby/3.2.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/bootsnap-1.16.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/application.rb:337:in `require_environment!'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/railties-5.2.8.1/lib/rails/application.rb:520:in `block in run_tasks_blocks'
remote:        /tmp/build_fbf58a0c/vendor/bundle/ruby/3.2.0/gems/sprockets-rails-3.4.2/lib/sprockets/rails/task.rb:61:in `block (2 levels) in define'
remote:        Tasks: TOP => environment
remote:        (See full trace by running task with --trace)
remote: 
remote:  !
remote:  !     Precompiling assets failed.
remote:  !
remote:  !     Push rejected, failed to compile Ruby app.
remote: 
remote:  !     Push failed

解決策

Heroku でサポートされている最も古い Ruby は Heroku-20 のバージョン 3.0.6 で、Rails 5.2 を使用しているようです。この互換性テーブルによると、Ruby 3 では Rails 6.1 に到達する必要があります。

Rails のアップグレードの場合は、公式ガイドに従ってバージョンごとに実行し、正しい動作を保証することが最善です。

Ruby についても同様です。このガイドを参照して、あるバージョンから別のバージョンへの変更点を確認し、必要に応じてコードを変更することをお勧めします。