永和システムマネジメント・DeNA 技術交流会発表資料
(株)永和システムマネジメント@mtsmfm松島 史秋springの死について私が知っている1つの方法
View Slide
松島 史秋GitHub, Twitter@mtsmfm
あるrails 3.2案件
spring の死
spring の死\LoadError/
TL;DRrails 上でrequireするな
TL;DRrails 上でrequireするな※ ただし stdlib は除く
$ bundle execspring rspec
Expected /.../break_spring/app/models/animal.rbto define Animal (LoadError)
あるから!
???
$ bundle execspring rspecすると何が起きるか
※ spring 1.3.3※ rails 3.2 のデフォルト設定の場合※ rails 4 ~> のデフォルト設定の場合は発生しません
$ bundle execspring rspec(1回目)
1. gem とか require2. app 以下とか load3. テスト実行(1回目)
簡易 spring
require & loadrun command
$ bundle execspring rspec(2回目、変更無)
(2回目、変更無)1. gem とか require2. app 以下とか load3. テスト実行
1. gem とか require2. app 以下とか load3. テスト実行(2回目、変更無)
1. gem とか require2. app 以下とか load3. テスト実行(2回目、変更無)fork 前fork 後
$ touch app/models/cat.rb
$ bundle execspring rspec(3回目、変更有)
1. load したのをconst_remove2. テスト実行3. const_missing でrequire(3回目、変更有)
require 済
require ‘animal’# => false
1. gem とか require2. app 以下とか load3. テスト実行4. const_missing でrequire
1. gem とか require2. app 以下とか load3. テスト実行4. const_missing でrequirefork 前fork 後
Rails 3config.cache_classes = true(eager_load = true を兼ねてる)Rails 4config.cache_classes = trueconfig.eager_load = false
stdlib のイケてる require場所どこ