3
4

Ruby2.7から3.2にアップデートした時につまづいたところ一覧

Last updated at Posted at 2024-08-02

重い腰を上げた

プラットフォームの期限切れも近づいており、そろそろRuby2.7→3.2にあげないといけないタイミングになった。
コケたところを備忘録として残す。

アップデート内容

ruby '2.7.6' → '3.2.2'
rails '6.0.3' → '~> 6.1'

起きた問題一覧

Macで Ruby 3.2.2 のダウンロードができない

$ bundle install
rbenv: version `3.2.2' is not installed
$ rbenv install 3.2.2
BUILD FAILED (macOS 14.4.1 on x86_64 using ruby-build 20240727)

下記の記事を元に3.2.2のインストール完了(感謝)

bundle update 時の依存関係エラー

nio4rエラー

$ bundle update
nio4r
An error occurred while installing nio4r (2.5.8), and Bundler cannot continue.
Make sure that `gem install nio4r -v '2.5.8' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  impressionist was resolved to 2.0.0, which depends on
    rails was resolved to 6.0.6, which depends on
      actioncable was resolved to 6.0.6, which depends on
        nio4r

nio4rで失敗
nio4r はaction cableでwebsoketのリアルタイム通信を行うためのもの
現在のプロダクトでは使用しないので削除してよさそう
→削除

json gemでエラー

json gemと依存関係のsdocのgemをアップデート

gem 'json', '~> 2.2'
gem 'sdoc', '~> 1.0', group: :doc

Psychのエラー

Alias parsing was not enabled. To enable it, pass `aliases: true` to `Psych::load` or `Psych::safe_load`. (Psych::AliasesNotEnabled)
https://github.com/sidekiq/sidekiq/issues/5140
gem 'psych', '<4'

4未満にして対処療法

yarn しようとすると node-sass でエラーになる

package.jsonの"@rails/webpacker"をアップデート

package.json
"@rails/webpacker": "5.4.3"

session_store の書き方が変更になっている

session_store': wrong number of arguments (given 2, expected 0..1) (ArgumentError)

上記で解消(感謝)

SQLを直記入している箇所で多々UnknownAttributeReferenceが起きる

ユーザーからの入力値を直接SQLに設定しない場合は、Arel.sql()でラップすることで避けることが可能

影響範囲が大きいので以下でこの設定を無効にしようとしたが、なぜか設定が効いてくれないので 一つ一つ確認して Arel.sql() でラップ...

# Rails 6.1 以降、安全性向上のために安全でない生のSQLクエリの実行箇所でエラーが起きるようになった
# allowしてあげることで今までと同じクエリで動作させる(本当はよくないが影響箇所が大きすぎるのでやむなし...)
Rails.application.config.active_record.allow_unsafe_raw_sql = true

該当箇所を全てチェックしラップ
影響範囲が大きいのでここは慎重に。大変だった。

letter_opnerでメールが開けなくなっている

gemバージョンをアップデート それでも開けない

  gem 'letter_opener', '~> 1.10'
  gem 'letter_opener_web', '~> 2.0'

add_template_helper が rails 6.1 で廃止になって送信できなくなっていた

下記にて解消

  # old
  add_template_helper(ApplicationHelper)
  add_template_helper(FormHelper)

  # new
  helper(ApplicationHelper)
  helper(FormHelper)

ブロックスコープの問題

Magick::Image.new(width, height){self.background_color = color}

こういう書き方はダメ

NoMethodError: undefined method `background_color=' for Magick::Image:Class

ブロック外でオブジェクトのプロパティを設定する方法に変更

image = Magick::Image.new(width, height) 
image.background_color = color

該当箇所を全てチェックし対応
影響範囲が大きいのでここは慎重に。大変だった。

キーワード引数にハッシュを渡している部分が動かなくなる

wrong number of arguments

(感謝)
ハッシュを展開して渡すように修正

該当箇所を全てチェックし対応
影響範囲が大きいのでここは慎重に。大変だった。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4