rails 5.1.6 のアプリをrails 5.2.0にアップデートしたときに、いろいろハマったのでメモ。
rails側
rails側での作業メモ。
cannot load such file -- bootsnap/setup
とりあえず rails app:updateしてみる。 route.rbなどは上書きしたらダメだけど、boot.rbとか触った覚えのないファイルは上書きしていく。
$ rails app:update
conflict config/boot.rb
Overwrite /Users/tkmru/code/old_app/config/boot.rb? (enter "h" for help) [Ynaqdh] Y
force config/boot.rb
exist config
conflict config/routes.rb
Overwrite /Users/tkmru/code/old_app/config/routes.rb? (enter "h" for help) [Ynaqdh] n
...
rails serverを起動するとbootsnapというrailsの起動を早くするgemがないとエラーが出た。railsが標準で使うようになったとのこと。
週刊Railsウォッチ(20170728)bootsnapがRailsで正式採用、Ruby Prizeの推薦開始、PostgreSQL配列の重複を除去ほか
gemファイルに追加してbundle installする。
$ bin/rails s
Traceback (most recent call last):
3: from bin/rails:3:in `<main>'
2: from bin/rails:3:in `require_relative'
1: from /Users/tkmru/code/old_app/config/boot.rb:4:in `<top (required)>'
/Users/tkmru/code/old_app/config/boot.rb:4:in `require': cannot load such file -- bootsnap/setup (LoadError)
undefined method `halt_callback_chains_on_return_false=' for ActiveSupport:Module
halt_callback_chains_on_return_falseはRails 4との後方互換のためのメソッドで、rails serverを起動するとこれがないというエラーが出た。
$ bin/rails s
=> Booting Puma
=> Rails 5.2.0 application starting in development
=> Run `rails server -h` for more startup options
Exiting
Traceback (most recent call last):
73: from bin/rails:4:in `<main>'
72: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:283:in `require'
71: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:249:in `load_dependency'
70: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:283:in `block in require'
...
10: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/railties-5.2.0/lib/rails/engine.rb:613:in `each'
9: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/railties-5.2.0/lib/rails/engine.rb:614:in `block (2 levels) in <class:Engine>'
8: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/railties-5.2.0/lib/rails/engine.rb:656:in `load_config_initializer'
7: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-5.2.0/lib/active_support/notifications.rb:170:in `instrument'
6: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/railties-5.2.0/lib/rails/engine.rb:657:in `block in load_config_initializer'
5: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:277:in `load'
4: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:249:in `load_dependency'
3: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activesupport-5.2.0/lib/active_support/dependencies.rb:277:in `block in load'
2: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:50:in `load'
1: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/bootsnap-1.3.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:50:in `load'
/Users/tkmru/code/old_app/config/initializers/new_framework_defaults.rb:23:in `<main>': undefined method `halt_callback_chains_on_return_false=' for ActiveSupport:Module (NoMethodError)
Ruby on Rails 5.2.0 Deprecations – Drifting Rubyによると、 5.2よりhalt_callback_chains_on_return_falseは削除されたみたい。 config/initializers/new_framework_defaults.rbの中のhalt_callback_chains_on_return_falseの行をコメントアウトした。
# Be sure to restart your server when you modify this file.
#
# This file contains migration options to ease your Rails 5.0 upgrade.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
Rails.application.config.raise_on_unfiltered_parameters = true
# Enable per-form CSRF tokens. Previous versions had false.
Rails.application.config.action_controller.per_form_csrf_tokens = true
# Enable origin-checking CSRF mitigation. Previous versions had false.
Rails.application.config.action_controller.forgery_protection_origin_check = true
# Make Ruby 2.4 preserve the timezone of the receiver when calling `to_time`.
# Previous versions had false.
ActiveSupport.to_time_preserves_timezone = true
# Require `belongs_to` associations by default. Previous versions had false.
Rails.application.config.active_record.belongs_to_required_by_default = true
# Do not halt callback chains when a callback returns false. Previous versions had true.
# ActiveSupport.halt_callback_chains_on_return_false = false # これをコメントアウトした!!
# Configure SSL options to enable HSTS with subdomains. Previous versions had false.
Rails.application.config.ssl_options = { hsts: { subdomains: true } }
これでrailsは起動するようになった。
frontend 側
フロントエンド側の作業メモ
can't find executable webpack for gem webpacker
webpackを実行してみると、gemのwebpackerから動かせるwebpackがないってエラーが出た。
$ bin/webpack
Traceback (most recent call last):
2: from bin/webpack:17:in `<main>'
1: from /Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/bundler-1.16.1/lib/bundler/rubygems_integration.rb:489:in `block in replace_bin_path'
/Users/tkmru/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/bundler-1.16.1/lib/bundler/rubygems_integration.rb:458:in `block in replace_bin_path': can't find executable webpack for gem webpacker (Gem::Exception)
rails webpacker:binstubsでwebpackのバイナリを再インストールすると、webpackも動くようになった。
$ bin/rails webpacker:binstubs
Copying binstubs
exist bin
conflict bin/webpack
Overwrite /Users/tkmru/code/old_app/bin/webpack? (enter "h" for help) [Ynaqdh] Y
force bin/webpack
conflict bin/webpack-dev-server
Overwrite /Users/tkmru/code/old_app/bin/webpack-dev-server? (enter "h" for help) [Ynaqdh] Y
force bin/webpack-dev-server
$ bin/webpack
set is deprecated! Use append instead
Hash: 9c54321948fe9d42f554
Version: webpack 3.11.0
Time: 4625ms
Asset Size Chunks Chunk Names
application-07d7627f2dffd5e35ab1.js 607 kB 1 [emitted] [big] application
_/node_modules/font-awesome/fonts/fontawesome-webfont-674f50d287a8c48dc19ba404d20fe713.eot 166 kB [emitted]
_/node_modules/font-awesome/fonts/fontawesome-webfont-fee66e712a8a08eef5805a46892932ad.woff 98 kB [emitted]
...