78

新しい機能にダミー データを入力したいのですが、db/seeds.rb ファイルを使用したくありません。この機能に関係のない他のデータが既にシードされているためです。

デフォルトseeds.rbファイルを実行するには、次のコマンドを実行しますrake db:seed

dbという名前のディレクトリにファイルを作成した場合、seeds_feature_x.rbそのファイル (のみ) を実行する rake コマンドはどのようになりますか?

4

3 に答える 3

186

カスタム シードを保持する別のディレクトリを作成することから始めます。この例ではdb/seeds. lib/tasks次に、ディレクトリに rakefile を追加してカスタム タスクを作成します。

# lib/tasks/custom_seed.rake
namespace :db do
  namespace :seed do
    Dir[Rails.root.join('db', 'seeds', '*.rb')].each do |filename|
      task_name = File.basename(filename, '.rb')
      desc "Seed " + task_name + ", based on the file with the same name in `db/seeds/*.rb`"
      task task_name.to_sym => :environment do
        load(filename) if File.exist?(filename)
      end
    end
  end
end

この rakefile は、db/seedsディレクトリ内のシード ファイルの名前 (拡張子を除く.rb) を受け入れ、それを実行するのと同じように実行しますseeds.rb。コマンドラインから次のコマンドを発行して、rake タスクを実行できます。

rake db:seed:file_name # Name of the file EXCLUDING the .rb extension 

更新:rake --tasksまたはの実行時にシード タスクも一覧表示されるようになりましたrake -T

于 2013-11-09T04:34:34.333 に答える
17

私はzeantsoiの答えを試してみましたが、それは私が望むものを与えてくれませんでした.ディレクトリ内のすべてのファイルを実行しました. ハッキングしてこれを手に入れました。

namespace :db do
  namespace :seed do
    task :single => :environment do
      filename = Dir[File.join(Rails.root, 'db', 'seeds', "#{ENV['SEED']}.seeds.rb")][0]
      puts "Seeding #{filename}..."
      load(filename) if File.exist?(filename)
    end
  end
end

これを使用するには、次のようにします。

rake db:seed:single SEED=<seed_name_without_.seeds.rb>

これにより、Rails.root/db/seeds フォルダーで .seeds.rb のないファイル名が検索されます (自動的に追加されます)。

作業例:

rake db:seed:single SEED=my_custom_seed

上記はRails.root/db/seeds/my_custom_seed.seeds.rbファイルをシードします

于 2015-08-04T16:53:12.740 に答える
11

複雑すぎる! ファイル名を渡さずに db/seeds ディレクトリの下のすべてのファイルを実行する簡単なタスクが必要でした。

# lib/tasks/seed.rake
desc "Run all files in db/seeds directory"

namespace :db do
  task seed: :environment do
    Dir[File.join(Rails.root, 'db', 'seeds', '*.rb')].each do |filename|
      puts "seeding - #{filename}. for reals, yo!"
      load(filename)
    end
  end
end
于 2016-05-23T19:09:40.890 に答える