最近古いバージョンのRailsに触ることが多かったので、二度と使わないで済むことを祈りつつ、得た知見をメモします。
Ruby 2.4 と PostgreSQL と Rails 3.2
Rails 3.2 と PostgreSQL とRuby 2.4で rake db:create
だけコケるおもしろ現象に出会いました。
option_string = options.symbolize_keys.sum do |key, value| case key when :owner " OWNER = \"#{value}\"" when :template " TEMPLATE = \"#{value}\"" when :encoding " ENCODING = '#{value}'" when :tablespace " TABLESPACE = \"#{value}\"" when :connection_limit " CONNECTION LIMIT = #{value}" else "" end end
のsumでエラーになります。
def sum(identity = 0, &block) if block_given? map(&block).sum(identity) else inject(:+) || identity end end
で、identityの初期値0と文字列を結合しようとして String can't be coerced into Integer
が出ます。
Ruby 2.4 以降はArray#sumが使われて型変換が起きる、のかな?
回避策もおもしろくて、どうもrake db:create
以外は大体動くっぽいです。
ので rake db:create
の代わりにSQLで直接 CREATE DATABASE "hogehoge" ENCODING = 'unicode';
するのが、Rubyのバージョンを変えたりするより、てっとり早かったです。
Ruby 2.5 と devise 3
Ruby 2.5では、deviseの3系は最新版(3.5.10)が動きません。 githubの3-stableブランチには修正版が上がっています。
次のようにGemfileでgithubのブランチを指定すれば、Ruby 2.5 と devise 3 を組み合わせて使えます。
gem 'devise', git: 'https://github.com/plataformatec/devise' , branch: '3-stable'
Turbolinks 2.5
Turbolinks.enableProgressBar
は2.5までしかありません。
https://github.com/turbolinks/turbolinks-classic/tree/2-5-stable#progress-bar
In Turbolinks 3.0, the progress bar will be turned on by default.
3.0 以上に上げるときは、Turbolinks.enableProgressBar
は消しましょう。
mysql2 0.4.10とrails 4.2.5
mysql2 は 0.4.10からMySQL 8 をサポートしています。 https://github.com/brianmario/mysql2/issues/980
rails は 4.2.5からmysql2 0.4.5をサポートしています。 https://qiita.com/park-jh/items/93ec6e967c1731fd90b3
MySQL 8 を使うためにmysql2のバージョンを上げるときは、Railsのバージョンも一緒に上げる必要があります。