事象
seed-fuを利用して、以下のようなrakeタスクを作成しました。
ruby
1require 'seed-fu' 2 3namespace :db do 4 desc 'insert seed data' 5 task seed_fu: :environment do 6 fixture_paths = Rails.root.join('db/fixtures').to_s 7 8 SeedFu.seed(fixture_paths) 9 end 10end
fixture_pathsの中身は一旦割愛しますが、このタスクを以下のように実行すると2回実行されてしまいます・・・
bash
1bundle exec rake db:seed_fu
確認したこと
ruby
1require 'seed-fu' 2 3namespace :db do 4 desc 'insert seed data' 5 task seed_fu: :environment do 6 fixture_paths = Rails.root.join('db/fixtures').to_s 7 binding.pry 8 SeedFu.seed(fixture_paths) 9 end 10end
task内でpry-bybug
を上記のように使ってデバッグしてみたところ、ここに2回止まったので、このtask do
にどうやら二回入っているようでした。
なぜでしょうか?
namespaceやtaskの名前が悪いのかと思って変えてみましたが、特に効果はありませんでした。
以下のようにexitを追加するとさすがに一回しか実行されませんでした。
ruby
1require 'seed-fu' 2 3namespace :db do 4 desc 'insert seed data' 5 task seed_fu: :environment do 6 fixture_paths = Rails.root.join('db/fixtures').to_s 7 8 SeedFu.seed(fixture_paths) 9 exit 10 end 11end
理由がわかる方いますでしょうか?
seed-fuが呼ばれるのは、そのgemでdb:seed_fuのtaskが既に登録されているからではないでしょうか。binding.pryが2回呼ばれるのはわかりません。
https://github.com/mbleigh/seed-fu/blob/v2.3.9/lib/tasks/seed_fu.rake#L27
>seed-fuが呼ばれるのは、そのgemでdb:seed_fuのtaskが既に登録されているからではないでしょうか。
質問にも記載しましたが、namespaceやtaskの名前を変更しても同じ現象だったため違うのではないかと思っています。
失礼しました。
rake -Tの結果は何回読み込まれていますか
読み込まれてるのは一回だけですね…
githubに問題のコードを再現することの敷居は高いですか?
あなたの回答
tips
プレビュー