Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Thinking about Rails upgrading

Thinking about Rails upgrading

y-yagi

July 20, 2017
Tweet

More Decks by y-yagi

Other Decks in Technology

Transcript

  1. Upgrading Flow 1. Bundle update Rails 2. Run test 3.

    Update config 4. Run test again 5. Fix deprecate message 6. Finally run the test again
  2. Upgrading Flow 1. Bundle update Rails 2. Run test 3.

    Update config 4. Run test again 5. Fix deprecate message 6. Finally run the test again
  3. Bundle update Rails • 何はともあれまずは “bundle update rails” • しかし依存しているgemでrailsのバージョンロックが入っている事

    が多く、まずここで時間がかかる • 片っ端から更新のPRを送る ◦ が、その前に、そもそもそのgem本当に必要か再度考える
  4. Upgrading Flow 1. Bundle update Rails 2. Run test 3.

    Update config 4. Run test again 5. Fix deprecate message 6. Finally run the test again
  5. public API / private API • Railsはpublic API(ユーザが使用して良いAPI)とprivate API(ユー ザが使用してはいけないAPI)が明確にわかれている

    • public APIはRails API doc にのっているAPI、それ以外は基本 private API • 例えばActive Recordではwhereはpublic APIだが、where!は private API ◦ なのでwhere!は使っては駄目ですよ ◦ Arelも同様
  6. public API / private API • public APIは一つのバージョンアップ(major, minor問わず)で挙動 が変わる事は無い

    ◦ public APIについては、必ず既存の挙動をdeprecationにしてから変えるようにして る ◦ 一部例外あり
  7. public API / private API • どうしても挙動が変わってしまうAPIについては、A Guide for Upgrading

    Ruby on Rails に載る(はず) • それ以外のpublic APIの挙動が変わっていたらそれはバグなの で、issueで報告する
  8. public API / private API • private APIを多用している場合のアップグレードは大変 ◦ そもそもメソッドが無くなっている場合もあったりで、気付くのが大変

    • Railsの機能を拡張するgemでprivate APIを使うのは仕方無いが、 普通のRailsアプリではprivate APIを使用しなくてもどうにかなるは ず
  9. public API / private API • どうしてもprivate APIが必要な場合は、その部分だけ切り出して gemにする、他のファイルと混ぜない(モンキーパッチである事が明 確にわかる管理にする)ようにきをつける

    • または、private APIをpublic APIにするようRails側にPRを送る ◦ 一旦public APIに出来ればこっちのもん • 最大限private APIがアプリ内で使われるのを避けるようにする
  10. Upgrading Flow 1. Bundle update Rails 2. Run test 3.

    Update config 4. Run test again 5. Fix deprecate message 6. Finally run the test again
  11. Upgrading Flow 1. Bundle update Rails 2. Run test 3.

    Update config 4. Run test again 5. Fix deprecate message 6. Finally run the test again
  12. Upgrading Flow 1. Bundle update Rails 2. Run test 3.

    Update config 4. Run test again 5. Fix deprecate message 6. Finally run the test again
  13. Upgrading Flow 1. Bundle update Rails 2. Run test 3.

    Update config 4. Run test again 5. Fix deprecate message 6. Finally run the test again
  14. After release • 性能劣化はちょいちょいおきる • 最近だと ◦ Upgrading from Rails

    5.0.0.1 to 5.0.1 increases import from... ◦ 5.0.0 -> 5.0.1 mysql foreign_keys is crazy slow
  15. After release • Rails側でパフォーマンスチェックの為の仕組みが無い ◦ RubyBench - Long Running Ruby

    Benchmark とかあるが、公式では無い • これについてはアプリ側で意識するしか現状無い