7
2

More than 5 years have passed since last update.

Rails6 のちょい足しな新機能を試す64(db:seed 編)

Posted at

はじめに

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 以前は確認しておりません。悪しからず :bow:

$ rails --version
Rails 6.0.0.rc1

準備

今回は、 Rails6 のちょい足しな新機能を試す15(Active Storage編) をベースに作業します。

seeds.rb を編集する

seeds.rb で avatar つきのUserを登録します。
ActiveJob::Base.queue_adapter も確認します。
あらかじめ、画像ファイルは用意しておきます。

db/seeds.rb
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

参考情報

7
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2