【问题标题】:How to drop test and development database in one rake task?如何在一项 rake 任务中删除测试和开发数据库?
【发布时间】:2012-04-18 01:52:17
【问题描述】:

我试图从一个 rake 任务中删除测试和开发数据库,​​如下所示:

task :regenerate do
  Rails.env = "test"
  Rake::Task["db:drop"].invoke
  Rails.env = "development"
  Rake::Task["db:drop"].invoke
end

测试数据库已成功删除。但是开发数据库并没有被丢弃。

关于如何完成这项工作的任何想法?

注意:这是在 Rails 3.2.3 上

更新:

很奇怪,但颠倒顺序是可行的:

task :regenerate do
  Rails.env = "development"
  Rake::Task["db:drop"].invoke
  Rails.env = "test"
  Rake::Task["db:drop"].invoke
end

这是怎么回事?!

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3.1


【解决方案1】:

反转它确实有效,因为database_tasks.rb中有一些奇怪的代码:

  def each_current_configuration(environment)
    environments = [environment]
    environments << 'test' if environment == 'development'

    configurations = ActiveRecord::Base.configurations.values_at(*environments)
    configurations.compact.each do |configuration|
      yield configuration unless configuration['database'].blank?
    end
  end

如果 env 是 development,它总是添加 test。我解决了想要同时执行developmenttest 的自定义db:rebuild 任务的情况,方法是先运行development,然后运行test。此外,在运行任务之前,我调用了我的set_env 方法,该方法确保设置ActiveRecord::Tasks::DatabaseTasks.env,如果没有这个,数据库连接似乎不会像预期的那样针对环境进行离散处理。我尝试了所有其他类型的断开连接等,但这无需进一步的代码即可工作。

def set_env(env)
  Rails.env = env.to_s
  ENV['RAILS_ENV'] = env.to_s
  ActiveRecord::Tasks::DatabaseTasks.env = env.to_s
end

Here is a gist of my full db.rake file with simultaneous multi-environment db:rebuild and db:truncate

【讨论】:

    【解决方案2】:

    你可以这样写:

    namespace :db do
      desc "Database custom drop"
      task :mydrop do
        system("rake db:drop RAILS_ENV=test")
        system("rake db:drop RAILS_ENV=development")
      end
    end
    

    【讨论】:

      【解决方案3】:

      在我使用 Ruby 2 和 Rails 3.2.13 的系统上,我可以运行 rake db:drop

      这会同时删除测试和开发数据库。现在比搞乱 rake 任务容易得多

      【讨论】:

        猜你喜欢
        • 2014-04-30
        • 1970-01-01
        • 2012-04-13
        • 2020-02-17
        • 1970-01-01
        • 1970-01-01
        • 2010-11-18
        • 2014-10-02
        • 1970-01-01
        相关资源
        最近更新 更多