はじめに
Rails 6 に追加されそうな新機能を試す第64段。 今回は、 db:seed
編です。
Rails 6 (と Rails 5.2.3以降)では、 rails db:seed
実行時は、inline ActiveJob job adapter が使われるようになりました。
デフォルトの async
だと seed の中で、 ActiveStorage の画像ファイルを読み込んで attach しようとすると seed が終了しないためらしいです。
Rails 5.2.3 にも、今回の修正は反映されています。
Ruby 2.6.3, Rails 6.0.0.rc1, Rails 5.2.3 で確認しました。Rails 6.0.0.rc1 は gem install rails --prerelease
でインストールできます。
手抜きになりますが、Rails 5.2.2.1 以前は確認しておりません。悪しからず
$ rails --version
Rails 6.0.0.rc1
準備
今回は、 Rails6 のちょい足しな新機能を試す15(Active Storage編) をベースに作業します。
seeds.rb を編集する
seeds.rb で avatar つきのUserを登録します。
ActiveJob::Base.queue_adapter
も確認します。
あらかじめ、画像ファイルは用意しておきます。
p ActiveJob::Base.queue_adapter
user = User.create(name: 'Taro')
user.avatar.attach(io: File.open(Rails.root.join('db/seeds/fixtures/gang.png')), filename: 'gang.png')
seed データを登録する
seed データを登録します。 InlineAdapter
が使われていることがわかります。
$ bin/rails db:create db:migrate db:seed
...
#<ActiveJob::QueueAdapters::InlineAdapter:0x000055b36f552d00>
その後の修正
こちらも試していないのですが、その後、 db:seed
実行時に無条件で、 :inline
に変更してしまうのは、よろしくないということで、 :async
のときだけ、 :inline
に変更するようになる模様です。
なお、この修正は、 Rails 5.2.3 には含まれておらず、 5.2.4 以降に反映されるものと思われます。
試したソース
試したソースは以下にあります。
https://github.com/suketa/rails6_0_0rc1/tree/try064_seed_inline_active_job