Skip to content

Instantly share code, notes, and snippets.

@alpaca-tc
Created September 22, 2016 13:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alpaca-tc/1c21c5533fd399986a9ad2d8a25304de to your computer and use it in GitHub Desktop.
Save alpaca-tc/1c21c5533fd399986a9ad2d8a25304de to your computer and use it in GitHub Desktop.

Rails

  1. Gemをアップデート
  • Railsをアップデートしずに、バージョンをあげられるgemはあらかじめアップデートしておく
  • Gemfileを編集する。gemによってはRails5に対応していない場合があるので、一旦Rails以外をコメントアウト → ひとつずつコメントインしてinstallする → 最後にDiffをチェックする(downgradeしてないか) これが一番速い
    • vim Gemfile → 編集する → bundle install → 繰り返す
  • いくつかのgemは修正版がリリースされていないのでgithubから直接DLしてる 例: gem 'sinatra', github: 'sinatra/sinatra', ref: 'a5da6fa82c...'
  • Deprecatedなエラーが出るgemは直してPR送ってあげる
  1. この段階ではおそらく./bin/rails consoleがwarningやエラーを吐きまくるので、一つずつ直していく。
  • deprecatedなオプションは削除する。
  • 例(他にもdeprecated warningが出るはずなので、ひとつずつ直していく)
    • config.serve_static_filesconfig.public_file_server.enabled
    • config.static_cache_controlconfig.public_file_server.headers
    • config.middleware に文字列は渡せなくなった
  1. 新しいRailsのデフォルト設定を検証する。
  • ./bin/rails rails:updateを叩いてすべてのdefaultファイルを一旦上書きする。その後、各ファイルのDiffを見て必要な部分だけをコピーしてcommitする。
  • rails:updateでは更新されないファイルもあるので、rails newで作成したプロジェクトを見るのも良い
  1. この頃には./bin/rails cやテストが走るようになる。テストを直していく。
  2. modelのテストを修正する
  • ActiveRecord::Typeを使っている場合はRails5の使い方に置き換える ActiveRecord::Type.lookup(:boolean).cast(value)
  • ActiveRecord::BaseではなくApplicationRecordを継承する
  • belongs_toはデフォルト必須項目になる(validates :..., presence: trueと同等)
  • さよならtimecop。代わりにActiveSupportのTimeHelpersを使う(travel_to)
  • created_atとかの値はnsecがfloorされるようになったっぽい?
  1. migrationを修正する
  • 過去すべてのdb/migrate/*.rbを修正する
  • ActiveRecord::Migrationはバージョン情報も含めて継承する
  • 大抵はActiveRecord::Migration[4.1] or ActiveRecord::Migration[4.2]?
    • いつRailsのバージョンを上げたのかは重要
  • 修正作業の検証は、一度db/schema.rbを消して./bin/rake db:drop db:create db:migrateが動くか試すと良い。(commitはしちゃだめ)
  • db/schema.rbの中身が変わるため、本番にあげてからdb/schema.rbを作り直す
    • ./bin/rake db:schema:dump RAILS_ENV=staging
    • ローカルにdb/schema.rb持ってきてdb/schema.rbを上書きする
  1. controllerのテストを修正する
  • warning地獄
  • テストでパラメーター, cookie, sessionの渡し方が変わった
    • get(:show, id: 1) -> get(:show, params: { id: 1 }, session: {...}
  • ActionController::Parameters
    • Hashを継承しなくなる(#merge!, #symbolized_keysが無い)
    • permit()されていない場合は、いろいろなところで使えなくなった。(url_forとかActiveRecord)
      • 無理に使うのではなくpermit()してください
    • Hashのメソッドを使いたければ#to_hを使う。
    • params.permit(:roles).to_h.merge('default_value' => '1')
      • キーが文字列なので注意
  • すべてのテストが通るまで頑張る...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment