新しい機能にダミー データを入力したいのですが、db/seeds.rb ファイルを使用したくありません。この機能に関係のない他のデータが既にシードされているためです。
デフォルトseeds.rb
ファイルを実行するには、次のコマンドを実行しますrake db:seed
。
db
という名前のディレクトリにファイルを作成した場合、seeds_feature_x.rb
そのファイル (のみ) を実行する rake コマンドはどのようになりますか?
新しい機能にダミー データを入力したいのですが、db/seeds.rb ファイルを使用したくありません。この機能に関係のない他のデータが既にシードされているためです。
デフォルトseeds.rb
ファイルを実行するには、次のコマンドを実行しますrake db:seed
。
db
という名前のディレクトリにファイルを作成した場合、seeds_feature_x.rb
そのファイル (のみ) を実行する 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