如果数据库不存在,则运行rake db:drop而不会失败

时间:2013-05-13 23:29:16

标签: ruby-on-rails exception rake rake-task

This comment说:

  

db:drop可以在db不存在时无故障运行

这正是我需要的:我需要运行db:drop但是如果数据库不存在则不抛出异常或停止整个过程,只要删除数据库(如果存在或什么也不做)。

我该怎么做?如果数据库不存在,怎么能告诉db:drop不要毁掉我的生命?

这是我遇到问题的代码(它有帮助):

namespace :db do
  task import: :environment do
    Rake::Task["db:drop"].invoke # If the database doesn't already exist, the whole import process terminates!
    Rake::Task["db:create"].invoke
    Rake::Task["db:migrate"].invoke
    database_config = Rails.configuration.database_configuration[Rails.env]
    system "psql --username=#{database_config['username']} #{database_config['database']} < PostgreSQL.sql"
  end
end

1 个答案:

答案 0 :(得分:0)

为什么不能进行简单的异常处理

namespace :db do
  task import: :environment do
    begin
      Rake::Task["db:drop"].invoke # If the database doesn't already exist, the whole import process terminates!
      Rake::Task["db:create"].invoke
      Rake::Task["db:migrate"].invoke
      database_config = Rails.configuration.database_configuration[Rails.env]
      system "psql --username=#{database_config['username']} #{database_config['database']} < PostgreSQL.sql"
   rescue Exception => e
     p "The Exception is #{e.message}"
   end
  end
end