【问题标题】:Rake task dependent if database already exists如果数据库已经存在,则依赖于 Rake 任务
【发布时间】:2015-01-06 20:53:47
【问题描述】:

只是作为序言,我已经阅读了this question 和其他人,但没有任何答案真正提到了在 rake 任务中执行此操作的方法。

我想做一个有点像这样的设置脚本:

  if database_exists?
    sh 'rake db:migrate'
  else
    sh 'rake db:setup'
  end

我没有写database_exists?,但是我怎么知道用户系统是否已经创建了这个数据库?

我不想每次都运行rake db:setup,这会删除用户数据库。 我想我每次都可以运行rake db:create && rake db:migrate,但是用户除了现在是db:setup 进程的一部分的rake 任务之外还需要运行rake db:seed

【问题讨论】:

  • 这是一个毫无意义的测试。只需使用rake db:setup。如果数据库已经存在,它不会重新创建数据库。创建数据库并运行迁移后,您可以根据需要多次运行它,而不会产生负面影响。
  • @meagar- db:setup 运行 db:create, db:schema:load, db:seed - 这个种子不是每次运行时都会运行吗?

标签: ruby-on-rails ruby rake


【解决方案1】:

我的建议是编写一个 ruby​​ 脚本来运行 rails runner 或一个 rake 任务,您可以在其中定义您的 database_exists?方法如下:

def database_exists?
  ActiveRecord::Base.connection
rescue ActiveRecord::NoDatabaseError
  false
else
  true
end

文档

【讨论】:

    猜你喜欢
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 2012-01-22
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多