我的项目是在Rails 3.2和refinerycms v 2.0.10
上我刚刚生成了一个新引擎,并运行了我的bundle和rails生成命令,以及我的迁移。现在,根据文档,我需要运行db:seed但我不想在应用程序级别执行db:seed因为我有其他几个引擎而且我不想重新播种它们。
与此问题有关: Rails engine / How to use seed? 但答案是在应用程序级别运行db:seed。
那我怎么说rake myNewEngine:db:seed?我知道它可以做到,但我的谷歌显然太弱了,不能疏通它。
答案 0 :(得分:1)
您可以生成自己的佣金任务。创建一个your_engine.rake文件,并确保它已加载到Rakefile中。
namespace :your_engine do
namespace :db do
task :seed do
YourEngine::Engine.load_seed
end
end
end
答案 1 :(得分:0)
编辑YOUR_ENGINE / lib / tasks / YOUR_ENGINE_tasks.rake
namespace :db do
namespace :YOUR_ENGINE do
desc "loads all seeds in db/seeds.rb"
task :seeds => :environment do
YOUR_ENGINE::Engine.load_seed
end
namespace :seed do
Dir[Rails.root.join('YOUR_ENGINE', '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
end
然后在主应用中,您可以执行自定义种子命令,单独执行任何种子文件
$rake -T | grep YOUR_ENGINE
rake db:YOUR_ENGINE:seed:seed1 # Seed seed1, based on the file with the same name in `db/seeds/*.rb`
rake db:YOUR_ENGINE:seeds # loads all seeds in db/seeds.rb