Rista Tech Blog

株式会社リスタの技術?ブログ

JOBLISTのRailsを5.2.0にバージョンアップしました

Ristaの4人目エンジニアを募集中! iOS Android Rails

5/24に学生アルバイトのid:fumihumiがJOBLISTのRailsを5.1.6から5.2.0にバージョンアップしてくれてました。

f:id:mikeda:20180713080148p:plain

なかなかブログ書いてくれないので、とりあえず自分(@mikeda)が手順とかメモ書いておきます。

手順

Rails アップグレードガイド | Rails ガイド

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からは必須じゃなくなりそうかな。

github.com

ここまでの手順でサービスとしてはだいたい動くようになりました。
あとはテストしながらエラー潰していきます。

エラーつぶし

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マガジンではこれを採用しています。このへんすぐ変わるのでそろそろ落ち着いてほしい感ある。