我有一个脚本将在启动包含Rails应用程序的虚拟实例时运行。这是用于设置测试环境的自动化系统的一部分,因此我希望无论这是否是第一次在此环境中启动应用程序,我都希望它能够正确初始化。也就是说,环境第一次看到这个应用程序时,它应该运行标准:
rake db:create
rake db:schema:load
rake db:fixtures:load
但是在创建数据库之后的任何时候,都应该忽略这些命令。到目前为止,知道可以跳过db:create是很聪明的,但它会不断重新运行其他的。
除了直接调用数据库并采取行动之外,还有一种简单的方法可以解决这个问题吗?
答案 0 :(得分:0)
可能实用的解决方案是忽略db:create上的错误(如果db存在,它将引发异常)
所以你可以创建像
这样的rake任务task :my_task => :environment do
begin
Rake::Task["db:create"].invoke
Rake::Task["db:schema:load"].invoke
Rake::Task["db:fixtures:load"].invoke
rescue Exception => e
end
#more stuff...
end