Slide 1

Slide 1 text

Rails upgrade

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

PowerAssertExˑ76 github.com/ma2gedev/power_assert_ex

Slide 4

Slide 4 text

Why upgrade?

Slide 5

Slide 5 text

Why upgrade? • Rails do not support old ones. See Also: http:// guides.rubyonrails.org/maintenance_policy.html • To fight the next few years.

Slide 6

Slide 6 text

Rails upgrade

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

upgrade steps 1. ⬜ $ rails app:update 2. ⬜ $ bundle install 3. ⬜ fix tests and deprecated features

Slide 9

Slide 9 text

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/

Slide 10

Slide 10 text

upgrade steps 1. ✅ $ rails app:update 2. ⬜ $ bundle install 3. ⬜ fix tests and deprecated features

Slide 11

Slide 11 text

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...

Slide 12

Slide 12 text

upgrade steps 1. ✅ $ rails app:update 2. ✅ $ bundle install 3. ⬜ fix tests and deprecated features

Slide 13

Slide 13 text

3. fix tests and deprecated features • test, test, test • fix deprecated features • also recommend to modify deprecation warnings

Slide 14

Slide 14 text

upgrade steps 1. ✅ $ rails app:update 2. ✅ $ bundle install 3. ✅ fix tests and deprecated features

Slide 15

Slide 15 text

pitfalls on the road to Rails 5.1.0.beta1

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

paranoia gem [2/2] -gem 'paranoia' +gem 'paranoia', github: "rubysherpas/paranoia", branch: "core" # TODO:

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Cannot add foreign key constraint [2/4] • Change Default Primary Keys to BIGINT #26266 https:// github.com/rails/rails/pull/26266

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Let's upgrade !