【问题标题】:capistrano 3.1 deploy with new migrations addedcapistrano 3.1 部署并添加了新的迁移
【发布时间】:2014-05-10 07:11:50
【问题描述】:

Ubuntu,rails 4.1,capistrano 3.1

我使用 Capistrano 将我的 Rails 应用程序部署到服务器,在此过程中,执行了 db:migration 并建立了数据库。

但是,后来我创建了新的迁移,当我使用“cap production deploy”时,它显示我的原始数据库错过了一些表(db:迁移未在我的新迁移上执行);当我使用“cap production deploy:migrate”时,capistrano 将运行所有迁移(包括之前已经执行的迁移),因此它报告某些表已经存在(当然它们之前存在)。

我的问题是,我怎样才能在那些新创建的迁移上执行 db:migrate ?

谢谢

【问题讨论】:

  • 1.您的 schema.rb 是否包含在您的 git 存储库中? 2. 当您提到capistrano 正在运行rake db:migrate - 这是通过使用ssh 的服务器吗?如果是这样,您是否设置了正确的 shell 变量来定义环境(RAILS_ENV=production)?
  • 1.是的; 2. 是的,通过 SSH,它运行生产部署,并尝试访问生产数据库。

标签: mysql ruby-on-rails capistrano3


【解决方案1】:

我想我知道答案:

Capistrano 没问题!

在部署过程中,它将按以下顺序执行操作:

1. udpate code
2. rake assets:precompile
3. rake db:migrate

第 2 步将以某种方式加载应用程序,该应用程序将执行所有初始化程序代码。但是在这里我访问了新的数据库表,它应该在#3 中创建。所以这会导致表丢失错误。

只是想知道为什么在 assets:precompile 期间加载应用程序,它有什么用? 我们可以不这样做吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多