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

Rails upgrade #m3dev

Rails upgrade #m3dev

How to upgrade Rails version. What I got when upgrading our Rails project from 5.0 to 5.1.0.beta1.
M3 Tech Talk 2017/03/03 #m3dev

Takayuki Matsubara

March 05, 2017
Tweet

More Decks by Takayuki Matsubara

Other Decks in Programming

Transcript

  1. self-introduction me |> name # Takayuki Matsubara |> job #

    Software Engineer Team Leader |> work_at # M3, Inc. |> works # Elixir, Rails, Java, JavaScript |> twitter # ma2ge |> github # ma2gedev |> oss # PowerAssertEx, breadcrumble, # chrono_logger, bundle-star, # faraday-encoding
  2. Why upgrade? • Rails do not support old ones. See

    Also: http:// guides.rubyonrails.org/maintenance_policy.html • To fight the next few years.
  3. before we go • Read A Guide for Upgrading Ruby

    on Rails http:// guides.rubyonrails.org/upgradingrubyon_rails.html • Is the test code sufficient? • Upgrade to latest version
  4. upgrade steps 1. ⬜ $ rails app:update 2. ⬜ $

    bundle install 3. ⬜ fix tests and deprecated features
  5. 1. $ rails app:update • executes $ rails app:update •

    protip you can specify THOR_DIFF for checking diff. see also: http://qiita.com/ma2ge/items/ a838864f059fc9b931b2 • check the difference • I recommended to use railsdiff.org. http://railsdiff.org/
  6. upgrade steps 1. ✅ $ rails app:update 2. ⬜ $

    bundle install 3. ⬜ fix tests and deprecated features
  7. 2. $ bundle install • perhaps it fails first or

    again and again • solve the dependency problems something like the following • update gems suitable for your new Rails version • if there's nothing for suitable version you can make a pull request or fork • etc...
  8. upgrade steps 1. ✅ $ rails app:update 2. ✅ $

    bundle install 3. ⬜ fix tests and deprecated features
  9. 3. fix tests and deprecated features • test, test, test

    • fix deprecated features • also recommend to modify deprecation warnings
  10. upgrade steps 1. ✅ $ rails app:update 2. ✅ $

    bundle install 3. ✅ fix tests and deprecated features
  11. paranoia gem [1/2] • https://github.com/rubysherpas/paranoia • caught the error fix

    `ArgumentError: wrong number of arguments (given 3, expected 4)` • this bug was fixed on https://github.com/rubysherpas/ paranoia/pull/384
  12. Cannot add foreign key constraint [1/4] • caught the error

    CREATE TABLE `xxx` (`id` bigint NOT NULL AUTO_INCREMENT PRIMARY KEY, \ `yyy_id` bigint, `name` varchar(255), INDEX `index_xxx_on_yyy_id` \ (`yyy_id`), CONSTRAINT `fk_rails_be560b73e9` -> FOREIGN KEY (`yyy_id`) -> REFERENCES `yyy` (`id`) -> ) ENGINE=InnoDB; ERROR 1215 (HY000): Cannot add foreign key constraint
  13. Cannot add foreign key constraint [2/4] • Change Default Primary

    Keys to BIGINT #26266 https:// github.com/rails/rails/pull/26266
  14. Cannot add foreign key constraint [3/4] class CreateXxx < ActiveRecord::Migration[5.1]

    def change create_table :xxx do |t| t.references :yyy, foreign_key: true t.string :name end end end
  15. Cannot add foreign key constraint [4/4] # plan 1 +class

    CreateXxx < ActiveRecord::Migration[5.0] -class CreateXxx < ActiveRecord::Migration[5.1] # plan 2 + t.references :yyy, foreign_key: true - t.references :yyy, type: :integer, foreign_key: true # plan 3 change all old migration to 5.1 if you are developing new project