読者です 読者をやめる 読者になる 読者になる

Rails 5.0.1 と Ruby 2.4.0 での警告ログを Forked Rails で消した

Rails 5.0.1 と Ruby 2.4.0 での組み合わせだと、以下のような警告ログが出る (一部では警告の川と呼ばれている。2016年の四条大橋っぽい) 。開発ローカルから転載したログなので 2.5.0-dev になっているあたり、2.4.0 も同様なので読み替えてもらいたい。

% bin/rails s
/Users/koic/.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:51: warning: constant ::Fixnum is deprecated
/Users/koic/.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/activesupport-5.0.1/lib/active_support/xml_mini.rb:52: warning: constant ::Bignum is deprecated
/Users/koic/.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/activesupport-5.0.1/lib/active_support/core_ext/numeric/conversions.rb:138: warning: constant ::Fixnum is deprecated
/Users/koic/.rbenv/versions/2.5.0-dev/lib/ruby/gems/2.5.0/gems/builder-3.2.2/lib/builder/xchar.rb:111: warning: constant ::Fixnum is deprecated
Loading development environment (Rails 5.0.1)

この警告ログについては開発中も認識していたもので、運用に載せるにあたり何かしらの問題に繋がることはないと思っていた、、、頃があった。何か問題があったかというと、運用に載せた際に cron 実行経由での rails r が出力する警告ログを Zabbix が拾って悲しいことになり (設定の認識が足りなかった)、Rails 5.0.1 にこの警告ログを消したコミットを cherry-pick した Forked Rails を用意した。モンキーパッチで済まそうと思っていたけれど、トップレベルで Fixnum が現れているコードがあったのでそれは断念。

github.com

使い方はいつものように (というのも悲しいが) Gemfile に以下のような記述をして bundle コマンドを実行する。

# Use rails from a branch of koic/rails until rails 5.0.2.
gem 'rails', git: 'https://github.com/koic/rails', branch: 'quiet_unified_integer_warn_on_rails_5_0_1'

builder と nokogiri も bundle update で一緒にアップグレードしておくと良い (特に builder) 。

-    builder (3.2.2)
+    builder (3.2.3)
-    nokogiri (1.6.8.1)
+    nokogiri (1.7.0.1)

Rails 5.0.2 (か Rails 5.1.0) つまり 5-0-stable ブランチか master がリリースされれば、この Forked Rails は不要になる。cherry-pick する内容も単純なので自前で用意しても良いと思う。