Ruby 2.4 / Rails 5.0に上げた際のパッチ5選

Preview:

Citation preview

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選

表参道.rb�#19Sansan株式会社2017-02-02�(Thu)

伊藤�浩⼀�(@koic)(株)永和システムマネジメント

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

わたし

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

今⽇の話

アプリケーションコードは巨⼈の肩に乗った氷⼭の⼀角

"Gemfile.lock�に記されているコードはプロジェクトのコードとしてメンテナンス対象である"

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

まとめ

アップグレードの道のりは1年前にははじまっている

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

アップグレードへの症状例

分かりやすいのは、そもそも�

rails�server�が起動しない✓

自動テストをパスしない✓

アップグレードすれば噛み合わせの悪いライブラリは出てきたりする

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

upstreamへの還元5選

bkeepers/dotenv#251✓

cowboyd/therubyracer#413✓

rsim/oracle-enhanced#1084

kubo/ruby-oci8#144✓

sferik/rails̲admin#2789✓

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

2016年3⽉

https://github.com/bkeepers/dotenv/pull/251

Fix�a�failure�spec�in�ruby�

2.4.0dev✓

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

diff

�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

����������

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

期待する振る舞いが分からない

https://bugs.ruby-lang.org/issues/12121�で問い合わせ

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

最⼩ケースの作成

��������������������������

�����������������������

�����������������

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

結果

Ruby�2.3.0�...�p�

M2.constants�#�=>�[:B,�:A]✓

Ruby�2.4.0�...�p�

M2.constants�#�=>�[:A,�:B]✓

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

回答から抜粋

これは、ドキュメントの問題だ と思い ま す 。Module#constantsの戻り順を保障したことはないし、これからも保障されないと思います。今回は⾼速化の⼀環として順序が変わりましたが、今後も同様のことは起き得ます。

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

どういうことだったか?

値を割り当ててから実⾏という流れが、値を割り当てる前に実⾏になってエラー

Module#constants�の戻り値の順序が変わっていた

仕様�(⾼速化の⼀環で順序が変わったが、そもそも順序の保証はない)

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

2016年5⽉

https://github.com/cowboyd/therubyracer/pull/413

Support�for�unified�Integer�class�in�Ruby�2.4+

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

diff

����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

どういうものだったか?

Ruby�2.4�では�Fixnum�=>�

Integer�となり、Integer�に対応する�module�がなくてエラー。

2017年1⽉にリリースされた。

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

2016年12⽉

https://github.com/rsim/oracle-enhanced/pull/1084

Fix�ORA-00933�error�when�

executing�`rails�

db:schema:load`

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

diff�(1)

���������������������������������������������������������������������������������������

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

diff�(2)

�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

どういうものだったか?`rails�db:migrate`�だと積み重ねただけのマイグレーションが実⾏されて遅い

db/schema.rb�を共有して、`rails�db:schema:load`�実⾏�

(テスト/CI環境)

Rails�5�で導⼊されたマルチインサート対応が必要で�`rails�

db:schema:load`�でエラー

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

2016年12⽉

https://github.com/kubo/ruby-oci8/pull/144

Fix�invalid�value�for�BigDecimal�in�Ruby�2.4.0+

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

diff

違いが分かりますか?

�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

������������������������������������������������������������

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

どういうものだったか?

`rake�spec`�を実⾏してエラーになった?�(記憶がおぼろ)

Ruby�2.3�でパスしていた�1.E+00�という値が、Ruby�2.4�

だとパスしなかった

仕様が分からないので、ruby/decimal�に�ISSUE�を書いて回答をもらう

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

2016年12⽉

https://github.com/sferik/rails̲admin/pull/2789

Fix�#encoding�error�by�

oracle̲enhanced✓

@ojiryメンバーによるパッチ✓

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

diff

����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

どういうものだったか?PostgreSQL�/�MySQL�/�SQLite�(?)�でない�RDBMS�は別途対応が必要だった

PR�を⾒てもらうサポートをする

リポジトリの所有者よりも最近マージボタンを押すような活動しているコミッターにメンションする

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

まだ時間はありますね?

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

Kaminari�1.0.0

https://github.com/sferik/rails̲admin/pull/2810

Loosen�the�dependency�

version�of�Kaminari�(1.0.0)✓

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

diff

�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

どういうものだったか?

gemspec�での縛りを緩めて、CI�用に�Gemfile�での縛りを作るお仕事

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

Conclusionkamipo名⾔�"困ってる⼈がいる問題が直るのではなく直す気のある⼈がいる問題が直る"

(汎用的なフレームワークは難しくても)�特化されたアプリケーション起点でのエラーなら分かりやすい

多⼈数が数年に渡って関わるようなアプリケーションでは特にアップグレード重要

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

Values最新の安定版�Rails�に速く乗る✓

自信を持ってプロジェクト(への加⼊)を進められる

新しいバージョンを使うことで�EOL�に出会わずにすむ

"Ruby�はバージョンを上げるだけで速くなる"

No�hate✓

Ruby�2.4�/�Rails�5.0に上げた際のパッチ5選 Powered�by�Rabbit�2.1.9

まとめ

アップグレードの道のりは1年前にははじまっている