先日、Rails 6が正式にリリースされました。
ついにRails 6が正式リリースされたようです!🎉
— Junichi Ito (伊藤淳一) (@jnchito) 2019年8月16日
Rails 6.0: Action Mailbox, Action Text, Multiple DBs, Parallel Testing, Webpacker by default, and Zeitwerk | Riding Rails https://t.co/pHoJb68B97
だから、というわけでもないのですが、Rails関連の記事をいくつか書いてQiitaにアップしています。
Railsアプリのアップグレードの手順
1つ目はRailsアプリのアップグレード(バージョンアップ)の手順です。
永久保存版!?伊藤さん式・Railsアプリのアップグレード手順 - Qiita
qiita.com
これまでに何度もRailsアプリのアップグレード作業を繰り返してきた僕が編み出したベストプラクティス、いわば「秘伝のタレ」的なノウハウが詰め込まれております。
記事としてはやや長文です。
config.load_defaultsとnew_framework_defaults_x_x.rbの解説記事
2つ目はこれまたRailsアップグレード時に登場するconfig.load_defaultsとnew_framework_defaults_x_x.rbの解説記事です。
config.load_defaultsとnew_framework_defaults_x_x.rbの関係を詳しく調べてみた - Qiita
qiita.com
ぶっちゃけ、このあたりの設定はしっかり把握しておらず「なんとなく雰囲気で」使ってきてた感があったので、じっくり調べてその調査結果をまとめてみました。
Railsガイドを読んでもここまで詳しく説明されていないので、以前の僕みたいに「なんかようわからん」と思っている人は一読の価値があると思います。
Rails 6.0.0で発生する警告文に関する情報
3つ目はRails 6へアップグレードしている最中に発生した警告文に関する情報です。
Rails 6に上げると”DEPRECATION WARNING: Initialization autoloaded the constants ActionText::ContentHelper, and ActionText::TagHelper.”のような警告が出る - Qiita
qiita.com
Rails本体のissueなのでそのうち修正されるとは思いますが、僕がググったときは「これ!」という日本語記事が見つからなかったので、同じように困ってる人がすぐに見つけられるようにQiitaに書いておきました。
他にも困る人が出てきそうなので、ググって見つけやすいようにQiita記事を書いておきました。
— Junichi Ito (伊藤淳一) (@jnchito) 2019年8月17日
Rails 6に上げると”DEPRECATION WARNING: Initialization autoloaded the constants ActionText::ContentHelper, and ActionText::TagHelper.”のような警告が出る - Qiita https://t.co/EBFRoUjxnM
ためしに手持ちのRailsアプリをRails 6に上げてみました
Rails 6がリリースされたので、ためしに手持ちのRailsアプリをRails 6に上げてみました。
アップグレードしたのは妻のパン屋のWebサイトです。
外から見てもよくわからないと思いますが、いちおうRails 6 + Ruby 2.6 + Herokuで動作しています。
アップグレード時に発生したその他のトラブル
詳細な原因は追えていませんが、アップグレード時にはいくつかのトラブルが発生しました。
Rails 6になったせいなのか、Rails以外のgemを上げたせいなのか、はたまたHerokuのスタックをheroku-18に上げたせいなのか、どれが引き金になっているのかは僕もよくわかりません。
トラブル1:サーバーが起動しない
デプロイ直後に以下のエラーが出てサーバーが起動しなくなりました。
Errno::ENOENT: No such file or directory @ rb_sysopen - tmp/pids/server.pid
Procfileにtmp/pidsディレクトリを作成するコマンドを追加したら動きました。
release: bundle exec rake db:migrate -web: bundle exec puma -C config/puma.rb +web: mkdir -p tmp/pids && bundle exec puma -C config/puma.rb
トラブル2:jsやcssが404エラーになる
サーバーは起動するようになりましたが、今度はjsやcssが軒並み404エラーになって「素のHTMLを表示しているだけ」の状態になってしまいました。
この件はRAILS_SERVE_STATIC_FILES=1
という環境変数をHerokuに追加することで直りました。
(これでいいのか確信はありません・・・)
トラブル3:hamlの文字参照が文字にならない
全角チルダ(〜)をきれいに表示するために、~
という文字参照をところどころで使っています。
ですが、この文字参照がそのまま~
で表示される画面が出てきました。
わあ、美味しそ〜と思って眺めてたらこれに気がついてしまったので…!! pic.twitter.com/4rTji5XpDn
— miwa (@miwa719) August 17, 2019
ふつうに文字が表示されるよう、一度.html_safe
しているのですが、ここではさらにもう一度.html_safe
することで修正できました。
- menu_items.each do |img, name| - name = name.html_safe %figure = image_tag "menus/#{img}.jpg", alt: name %figcaption - %h2.text-shadow= name + %h2.text-shadow= name.html_safe
修正完了しました〜。https://t.co/9nr2xNdP9n pic.twitter.com/A1MIj1YECf
— Junichi Ito (伊藤淳一) (@jnchito) August 17, 2019
2019.8.20追記
この件はRails側の不具合だったようです。以下のpull requestで修正済みです。
(Rails 6.0.1のタイミングでリリースされるかな?)
Prevent TagBuilder modify options by tsuka · Pull Request #36981 · rails/rails · GitHub
情報提供してくれた、tkawaさん、tsukaさん、どうもありがとうございます!
https://t.co/Od0gyFMgrn ということで次のリリースでは直るはず!
— Toru KAWAMURA (@tkawa) August 20, 2019
その他、最近書いたQiita記事
ついでに、最近書いたその他のQiita記事も紹介しておきます。
統合テストはリクエストスペックに移行させよう、という話
【動画付き】Railsチュートリアルの統合テスト(integration test)は、RSpecのリクエストスペックに置き換えるのがラクです - Qiita
qiita.com
Rails標準の統合テスト(integration test)をRSpecに書き換えるなら、リクエストスペックがいいですよ〜、という解説記事です。
解説動画も作りました。
Railsチュートリアルの統合テスト(integration test)は、RSpecのリクエストスペックに置き換えるのがラクです
Cloud9上でフィーチャスペックを動かす方法
【2019年7月版・動画付き】Cloud9上でEveryday Railsの`js: true`付きのフィーチャスペックを実行する手順 - Qiita
qiita.com
Cloud9上でEveryday Railsのフィーチャスペックを動かす方法を解説した記事です。
こちらも動画付きです。
【2019年7月版】Cloud9上でEveryday Railsの`js: true`付きのフィーチャスペックを実行する手順
Cloud9、Chrome、ChromeDriverは、いずれもRubyから見ると外部リソースになるので情報をきれいに同期させるのが難しいですね。
strftimeじゃなくてlメソッドを使おう、という話
【初心者向け・動画付き】Railsで日時をフォーマットするときはstrftimeよりも、lメソッドを使おう - Qiita
qiita.com
最後に紹介するのは「お前ら、すぐにstrftimeに頼らず、l(える)メソッドを使っていこうぜ」という啓蒙記事です。
lメソッドはググラビリティが悪いせいか、どうもstrftimeの方がよく使われている気がします。
でも僕は使っていません。みなさん、日時フォーマットはDRYに書きましょう。
こちらもやはり動画付きです。
【初心者向け】Railsで日時をフォーマットするときはstrftimeよりも、lメソッドを使おう
別にYouTuberを目指しているわけではないのですが、「文章で書くより、画面を見せながら口で話した方が早くてわかりやすい」と思ったときは、先に動画を作って、その内容をQiitaとかに簡単にまとめるようにしています。
宣伝:何はともあれテスト!テスト!!Everyday Railsでお勉強しましょう
Railsのアップグレードには自動テストが必要不可欠です。
テストが苦手な人は「Everyday Rails - RSpecによるRailsテスト入門」を読んで、テストの自動化をマスターしましょう!
まだ読んだことがない方はぜひチェックしてみてください😄