Movatterモバイル変換


[0]ホーム

URL:


酒と泪とRubyとRailsと

Rails 5へのアップデート


Rails 4系からRails 5へのアップデートに関してのTipsです。

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

🚌アップデートタスク

Rails 5にGemをアップデートした後にrails app:updateコマンドを実行するとconfig/environemets/bin/配下のファイルかどが新しいバージョンのファイルを作成、既存ファイルの更新を行います。

rails app:update

🗽Rubyの部分の変更

Active RecordはApplicationRecordを継承

Model(Active Record)はApplicationRecordを継承する形になります。

classApplicationRecord< ActiveRecord::Base
self.abstract_class =true
end
  • self.abstract_class=true : 抽象クラスを表す。対応するテーブルがない場合の設定

Active JobはApplicationJobを継承

Active JobではApplicationJobを継承するように変更されました。

classApplicationJob< ActiveJob::Base
end

Action MailerはApplicationMailerを継承

Action MailerはApplicationMailerを継承するようになりました。

classApplicationMailer< ActionMailer::Base
defaultfrom:'from@example.com'
layout'mailer'
end

Controllerのparamsがオブジェクトに変わった

Controllerのparamsがハッシュからオブジェクトを返すように変わりました。
paramsをハッシュ前提にしているメソッドがあった場合は明示的にハッシュに変換する必要があります。

params.permit([:proceed_to,:return_to]).to_h

belongs_toは関連付けがない場合はバリデーションエラー

Active Recordのbelongs_toは関連付け(association)が存在しない場合はバリデーションエラーを返すようになりました。
この機能は関連付けごとにoptional: trueを指定してオフにできます。

before_saveなどのCallbackのロールバック

Rails 4.2まではbefore_saveなどのActive Recordのコールバックでfalseを返すとロールバックされましたが、Rails 5.0からはthrow(:abort)で明示的にロールバックをする必要があります。

classArticle
before_savedefcheck_publishable?
throw(:abort)unless publishable?
end
end

🐡テストに関する変更

Railsコントローラのテスト

assignsメソッド、assert_templateメソッドはGemrails-controller-testing
に切り出されました。これらのメソッドを使う場合はこちらのgemを追加してください。

🐝設定に関する変更

本番環境ではautoload(自動読み込み)が無効

app配下は自動読み込みされますがそれ以外のlibなどに定義したクラスは自動で読み込まれません。
次の対策があります。

  • 明示的にrequireを行う
  • ディレクトリをapp/に移動する(lib/ =>app/lib)
  • Rails.application.config.enable_dependency_loading=trueにする(autoloadを有効にする)

OriginチェックによるCSRF対策

CSRF防御の一貫として、「HTTP Originヘッダ」によるサイトの出自のチェックができるようになりました。

config.action_controller.forgery_protection_origin_check =true

サブドメインでのHSTSを有効にするオプション

サブドメインでHSTS(HTTP Strict Transport Security)を有効にするオプションが追加されました。

config.ssl_options = {hsts: {subdomains:true } }

🏀JavaScriptに関する変更

Progress barの表示

ページをロードする際の読み込み時のProgress barの表示がデフォルトでONになりました。詳細は『turbolinks/turbolinks at v5.0.0』を参照ください。色を変更する場合は次のCSSを適用します。

.turbolinks-progress-bar {
height:5px;
background-color: green;
}

非表示にしたい場合は次のCSSを適用します。

.turbolinks-progress-bar {
visibility: hidden;
}

JavaScriptで生成されるフォームへのCSRFトークンを生成

JavaScriptで生成されるフォームによるコードインジェクション攻撃に対応するためにフォーム単位でCSRFトークンを生成するようになりました。次の設定で有効になります。

config.action_controller.per_form_csrf_tokens =true

静的なファイルをRailsで返す

/public配下の静的なファイルをRailsから返す場合はconfig.public_file_server.enabled = trueを設定します。(nginx/Apacheから返却するほうが効率がよいのでfalseにすべきです)

Rails.application.configuredo
# config.serve_static_files から変更
config.public_file_server.enabled =true
end

new_framework_defaults.rbについて

rails updateコマンドを実行するとconfig/initializers/new_framework_defaults.rbが生成されます。古いバージョンのRailsの挙動を保つための設定ですが、Railsの進化についていくためにも必要な設定以外はデフォルトの設定で問題なく動くようにアプリケーションの実装を修正していくとよいと思います。

🐮補足:Forkwell JobsのRails 5へのアップデート事例

Forkwell Jobsさんのアップデート事例です。発生したエラーなどと対策が丁寧にかかれており、とてもわかり易いです。

最速で Forkwell を Rails 5 にアップグレードしてみました - Grooves開発ブログ

🍮補足:DeNAでのRails 5へのアップデート事例

DeNAのゲームプラットフォームをRuby 2.4、Rails 5にアップデートした事例です。
規模の大きなアプリケーションのアップデートの事例で、参考にするとスムーズにアップデートできそうです。

「Sakasho」のRubyを2.4に、Railsを5にアップグレードしました

🗻参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍

コンテンツ
  1. アップデートタスク
  2. Rubyの部分の変更
    1. Active RecordはApplicationRecordを継承
    2. Active JobはApplicationJobを継承
    3. Action MailerはApplicationMailerを継承
    4. Controllerのparamsがオブジェクトに変わった
    5. belongs_toは関連付けがない場合はバリデーションエラー
    6. before_saveなどのCallbackのロールバック
  3. テストに関する変更
    1. Railsコントローラのテスト
  4. 設定に関する変更
    1. 本番環境ではautoload(自動読み込み)が無効
    2. OriginチェックによるCSRF対策
    3. サブドメインでのHSTSを有効にするオプション
  5. JavaScriptに関する変更
    1. Progress barの表示
    2. JavaScriptで生成されるフォームへのCSRFトークンを生成
    3. 静的なファイルをRailsで返す
    4. new_framework_defaults.rbについて
  6. 補足:Forkwell JobsのRails 5へのアップデート事例
  7. 補足:DeNAでのRails 5へのアップデート事例
  8. 参考リンク
トップへ
Rails/Modelバリデーションコールバック変更前後の値の確認値の保存・更新アソシエーション削除メソッドSQLの実行日付カラムの設定便利なDB関連設定読込み専用(Read Only)Concern(共通処理)クエリTipsRails/Controllerrenderレシピ集HTTPステータスシンボルIPの取得についてStrong ParametersControllerのTipsRails/ViewHAMLチートシート画像アップロードフォームS3への画像アップロードForm Objectフォームヘルパー検索可能なselectタグenum - selectタグシンプルな検索ボックス別ウィンドウ・フォームRailsいろいろi18nについてRails.cacheメール送信ロギングCapistrano3でデプロイセッション管理環境ごとのYAML設定読込xx分前の時間表記Tipsいろいろ便利ライブラリ簡単Webmock:VCRN+1対策:bullet環境変数の管理: dotenvi18nサポート: i18n-tasksLDAP:net-ldapヘッダ:secureheadersrack-mini-profileractiverecord-precountカバレッジ計測パンくずリスト+MetadataRSpecの記法自動修正アプリランキング取得Unicorn導入手順unicorn-worker-killerRSpecController SpecCapybaraとヘッドレスChromeRequest SpecAPI認証 Spec便利Tipsデザインパターン概要アブストラクトファクトリビルダファクトリメソッドアダプタコンポジットデコレータプロキシコマンドインタプリタイテレータオブザーバストラテジテンプレートメソッドRuby基礎文字列/String配列/Arrayハッシュ/Hash構造体/StructSpawn(コマンド実行)BundlerについてTipsRails 5.1へのアップデートRails 5へのアップデートrbenvバージョンアップpumaをsystemdで動かすURI.encodeとCGI.escapeURLのパラメータを変更処理時間を計測画像JPEG/PNG/GIF判定トラブルシュートNo route matches assets

[8]ページ先頭

©2009-2025 Movatter.jp