5/24に学生アルバイトのid:fumihumiがJOBLISTのRailsを5.1.6から5.2.0にバージョンアップしてくれてました。
なかなかブログ書いてくれないので、とりあえず自分(@mikeda)が手順とかメモ書いておきます。
手順
railsバージョンアップ
基本的な手順はこうなのですが、たいてい依存関係のエラーがいっぱい出ます。
- Gemfileのrailsのバージョンを書き換える
- bundle update rails
1つずつ調べるの面倒なので、自分は最近はこういう手抜き手順をとっています。。。
- bundle update railsする
- 依存関係エラー出てるものをいったん全部Gemfileからコメントアウトする
- bundle update railsする
- コメントアウトを戻してbundle installする
コンフィグ調整
bin/rails app:updateで新しいコンフィグを生成。 いったん全部上書きして、差分見ながら調整してコミットします。
特に明記するほどのものは無かったです。
bootsnap導入
bootsnapが必須になっていたのでGemfileに追加してbundle。
5.2.1からは必須じゃなくなりそうかな。
ここまでの手順でサービスとしてはだいたい動くようになりました。
あとはテストしながらエラー潰していきます。
エラーつぶし
cache_storeをredis_storeからredis_cache_storeに変更
オブジェクトをキャッシュしているところで uninitialized constant ActiveRecord::AttributeSet
というエラーが出ました。
cache_storeとしてredis_storeを使っていたのですが、Rails 5.2からRails本体がredisのキャッシュストアをサポートしているので試しに変えてみるとエラーが出なくなりました。
- config.cache_store = :redis_store, "#{Settings.redis_url}/0/cache", { expires_in: 90.minutes } + config.cache_store = :redis_cache_store, { + driver: :hiredis, + url: "#{Settings.redis_url}/0/cache", + expires_in: 90.minutes + }
unicornでdotenvがエラー
unicornでdotenvで環境変数読み込んでるところでエラーが出るようになりました。
I, [2018-05-14T10:24:18.715141 #9752] INFO -- : executing ["/var/www/joblist/shared/bundle/ruby/2.5.0/bin/unicorn", "-c", "/var/www/joblist/shared/unicorn.rb", "-E", "staging", "-D", {15=>#<Kgio::UNIXServer:fd 15>}] (in /var/www/joblist/releases/20180514012241) /var/www/joblist/shared/bundle/ruby/2.5.0/gems/dotenv-2.4.0/lib/dotenv/environment.rb:7:in `initialize': wrong number of arguments (given 1, expected 2) (ArgumentError)
dotenv側の変更の影響っぽいのでコードを修正しました。
require 'dotenv' -ENV.update(Dotenv::Environment.new("#{shared_path}/.env")) if File.exist?("#{shared_path}/.env") +ENV.update(Dotenv::Environment.new("#{shared_path}/.env", false)) if File.exist?("#{shared_path}/.env")
cookie.sigendが読めなくなる
Rails 5.1でcookie.sigendに値をつっこむ。
cookies.signed[:xxx] = 1
Rails 5.1だと読める。
cookies.signed[:xxx] => 1
Rails 5.2にすると読めなくなる。
cookies.signed[:xxx] => nil
new_framework_defaults_5_2.rbの設定値など調整してみましたが、サクッと解決方法がわからず、使っているところが重要な箇所ではなかったので今回は『まぁいいか』ということにしました。
まとめ
Railsのバージョンを5.2.0にアップしました。特に問題無く稼働しています。
Active Storageはまだ試せてないですが(今はCarrierWave)、本体に組み込まれたRedis Cache Storeは導入してこちらも特に問題はなく稼働しています。
新しく導入されたcredentials.yml.encとmaster.keyによる秘密情報管理はなかなか良さそうなので、これから切り替えを進める予定です。
※最近作ったJOBLISTマガジンではこれを採用しています。このへんすぐ変わるのでそろそろ落ち着いてほしい感ある。