加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何在一个rake任务中删除测试和开发数据库?

发布时间:2020-12-17 02:54:21 所属栏目:百科 来源:网络整理
导读:我试图从一个rake任务中删除测试和开发数据库,??如下所示: task :regenerate do Rails.env = "test" Rake::Task["db:drop"].invoke Rails.env = "development" Rake::Task["db:drop"].invokeend 测试数据库已成功删除.但是开发数据库没有被删除. 关于如何使
我试图从一个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

到底是怎么回事?!

解决方法

反转它确实有效,因为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是开发,它总是添加测试.我解决了想要通过先运行开发和第二次测试来进行自定义db:rebuild任务以进行同步开发和测试的情况.此外,在运行任务之前,我调用我的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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读