【问题标题】:Run rake db:drop without failure if database doesn't exist如果数据库不存在,则运行 rake db:drop 而不会失败
【发布时间】:2013-05-08 02:52:25
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    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
    

    【讨论】:

    • 如果 db:drop 失败,OP 肯定希望进程的其余部分(即 db:create 向前)执行。在此代码中,它将跳过该代码并转到异常块。
    猜你喜欢
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    • 2021-06-25
    • 1970-01-01
    相关资源
    最近更新 更多