我想用虚拟数据填充新功能,但不想使用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命令看起来(仅)运行该文件会是什么样?
Answers:
首先创建一个单独的目录来保存您的自定义种子-此示例使用db/seeds
。然后,通过将rakefile添加到lib/tasks
目录中来创建自定义任务:
# 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
。
seed_file
为filename
(已编辑)。
intern
是的别名to_sym
。
custom_seed.rake
而不是调用文件custom_seed.rb
(答案是正确的,但我还是设法将其混合了)。
我尝试了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
seed
文件?您是否已尝试从中调用另一种方法seeds.rb
?上次我seeds.rb