4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

5年間触られていなかったプロジェクトのruby・railsのバージョンアップで発生したerror等

Last updated at Posted at 2023-04-07

記事の内容

タイトルにある通り、5年間改修が一度もはいらず放置されていたプロジェクトがなぜかこのタイミングで脆弱性診断に引っかかってしまい自分が担当することになりました。railsのバージョン上げることで解消しそうなため対応しました。
その際に、発生したerror等をまとめていこうと思います。
rails app:update は実行したものの上書きできなかったため発生したものもありますが、ご容赦いただけますと。。

環境

改修前:ruby: 2.2.8 → 改修後:2.7.6
改修前:rails: 4.2.8 → 改修後:6.1.7.6

method_missing': undefined method raise_in_transactional_callbacks=' for ActiveRecord::Base:Class (NoMethodError)

このエラーはraise_in_transactional_callbacks というメソッドが ActiveRecord::Base クラスに存在しないことを示しています。具体的には、NoMethodError が発生しています。
Rails 4.1 で導入され、Rails 5.0 で非推奨となり、Rails 5.1 で削除されました。
そのため今回発生しました。

解決策

config/application.rb よりraise_in_transactional_callbacksを使用しているコードを削除しました。
Rails 5.0以降では、raise_in_transactional_callbacks= はデフォルトで有効になっています。

undefined method `alias_method_chain' for String:Class (NoMethodError)

Did you mean? alias_method

このエラーはalias_method_chain というメソッドが String クラスに存在しないため発生しました。このメソッドは先程同様Rails 5.0 で非推奨となり、Rails 5.1 で削除されました。

解決策

そのためprependに置き換えることで対応しました。
参考記事は以下です。
https://qiita.com/rorensu2236/items/3f94ff653ba0c45141a7

NoMethodError (undefined method `before_filter'...

before_filter も同じくRails 5.0 で非推奨となり、Rails 5.1 以降では削除されました。

解決策
before_filterbefore_action に置き換えます。
参考
https://pikawaka.com/rails/before_action

skip_before_filterも同様にskip_before_actionに置き換えました。

NoMethodError: undefined method `new' for BigDecimal:Class

decimal型を使用しているカラムを使用した際に発生しました。
Ruby2.7からRubyで使われているgem bigdecimalのバージョンが2.0.0になってるそうです。

解決策

以下のようにbigdecimalのバージョンを2.0.0未満にすればBigDecimal.newが使えようになりました。

gem "bigdecimal", "1.4.4"

参考
https://zenn.dev/harasho/articles/undefined-method-new-for-big-decimal-class

ActionView::MissingTemplate

その1

render nothing: trueがRails 5.1以降では削除されています。

解決策

render body: nilのように修正

参考
https://stackoverflow.com/questions/34688726/the-nothing-option-is-deprecated-and-will-be-removed-in-rails-5-1

その2

render textオプションは、Rails 5.1以降では削除されています。

解決策

render plainのように修正

参考
https://kenchan0130.github.io/post/2020-07-07-1#plaintext%E3%81%AE%E3%83%AC%E3%83%B3%E3%83%80%E3%83%AA%E3%83%B3%E3%82%B0%E6%96%B9%E6%B3%95%E3%81%8C%E5%A4%89%E6%9B%B4

終わりに

rubyのバージョンはマイナーアップデートだったので変更はほとんどなかったと思います。
ただ、railsはメジャーアップデートしたので結構errorがでて驚きました。
特にrails5.1で削除されたものが多かったみたいです。
それだけ重要なアップデートだったのだと。。
各プロジェクトにて、少しづつ上げていったほうが後々楽だなと感じました。

4
6
2

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
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?