我可以有选择地运行db:schema:load吗?

时间:2013-03-04 22:59:00

标签: ruby-on-rails linux rake

我有一个脚本将在启动包含Rails应用程序的虚拟实例时运行。这是用于设置测试环境的自动化系统的一部分,因此我希望无论这是否是第一次在此环境中启动应用程序,我都希望它能够正确初始化。也就是说,环境第一次看到这个应用程序时,它应该运行标准:

rake db:create
rake db:schema:load
rake db:fixtures:load

但是在创建数据库之后的任何时候,都应该忽略这些命令。到目前为止,知道可以跳过db:create是很聪明的,但它会不断重新运行其他的。

除了直接调用数据库并采取行动之外,还有一种简单的方法可以解决这个问题吗?

1 个答案:

答案 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