新しい機能にダミーデータを設定したいのですが、db/seeds.rbファイルを使用したくないのは、この機能に関係のない他のデータが既にシードされているからです。
デフォルトのseeds.rb
ファイルを実行するには、rake db:seed
コマンドを実行します。
seeds_feature_x.rb
という名前のdb
ディレクトリにファイルを作成した場合、そのファイルを実行する(のみ)rakeコマンドはどのようになりますか?
カスタムシードを保持する別のディレクトリを作成することから始めます。この例では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
の実行時にシードタスクも一覧表示されるようになりました。
私は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
ファイルをシードします
複雑すぎる!ファイル名を渡さずに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