Fel*_*ger 71 ruby rake ruby-on-rails seed ruby-on-rails-3.2
我想用虚拟数据填充新功能,但不想使用db/seeds.rb文件,因为它已经有种子,其他数据与此功能无关.
要运行默认seeds.rb文件,请运行该命令rake db:seed.
如果我在被db调用的目录中创建一个文件seeds_feature_x.rb,那么rake命令会运行(仅)该文件是什么样的?
zea*_*soi 171
首先创建一个单独的目录来保存自定义种子 - 此示例使用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
Run Code Online (Sandbox Code Playgroud)
此rakefile接受db/seeds目录中的种子文件的名称(不包括.rb扩展名),然后按原样运行它seeds.rb.您可以通过从命令行发出以下命令来执行rake任务:
rake db:seed:file_name # Name of the file EXCLUDING the .rb extension
Run Code Online (Sandbox Code Playgroud)
更新:现在它还应该在运行时列出种子任务rake --tasks或rake -T.
Hea*_*h N 13
我尝试了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
Run Code Online (Sandbox Code Playgroud)
要使用它,请执行以下操作:
rake db:seed:single SEED=<seed_name_without_.seeds.rb>
Run Code Online (Sandbox Code Playgroud)
这将在Rails.root/db/seeds文件夹中查找没有.seeds.rb的文件名(它会为您添加这些文件名).
工作范例:
rake db:seed:single SEED=my_custom_seed
Run Code Online (Sandbox Code Playgroud)
以上将播种该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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31832 次 |
| 最近记录: |