我现在正在开发一个安装了引擎的Rails应用程序。
我认为编写一个rake tast是一个好主意,它将从Engine复制迁移并运行rake db:migrate。
但是,如果我在引擎中只使用一个引擎运行rake任务-Arry(见下文),rake tast将从引擎复制迁移并迁移数据库。但是如果我将另一个引擎添加到数组中,则rake-Task将不再起作用。
namespace :work_in_progress do
desc 'Migrate the engines db tables'
task migrate_migrations_from_engines: :environment do
# The array with the available engines (just add the new engine here)
engines = [
'engine_one',
'engine_two'
]
puts 'Migrating migrations from engines...'
engines.each do |engine|
puts 'Copying migrations from ' + engine
Rake::Task[engine + ':install:migrations'].invoke
end
puts 'Migrating the database...'
Rake::Task['db:migrate'].invoke
puts 'Done...'
end
end
如何改进上面的脚本,以便我可以迁移多个引擎? 是否有其他脚本可以解决此问题(从Engines复制迁移并运行它们?)?
非常感谢!
菲利普
答案 0 :(得分:4)
您必须运行rake任务才能安装迁移,然后运行这些任务。尝试使用此代码执行任务:
namespace :work_in_progress do
desc 'Migrate the engines db tables'
task migrate_migrations_from_engines: :environment do
# The array with the available engines (just add the new engine here)
engines = ['engine_one','engine_two']
puts 'Migrating migrations from engines...'
engines.each do |engine|
puts 'Copying migrations from ' + engine
`bundle exec rake #{engine}:install:migrations`
end
puts 'Migrating the database...'
`bundle exec rake db:migrate`
puts 'Done...'
end
end