【问题标题】:How does rake db:migrate work on Heroku?rake db:migrate 如何在 Heroku 上工作?
【发布时间】:2012-02-29 08:41:51
【问题描述】:

在我推送到 Heroku 并运行 rake db:migrate 后,我的应用程序刚刚崩溃。但是这个错误没有意义......

ActionView::Template::Error (undefined method `email_address' for #<Invite:0x000000065fb788>):

...因为迁移包含:

rename_column :invites, :email, :email_address

所以我最终发现它在应用重启后可以工作 (heroku restart)。很划算。

但是,我对 rake db:migrate 现在的工作方式感到困惑。其他每个迁移都会在不重新启动的情况下拾取相应的模型属性。

当我在 Heroku 上运行 rake db:migrate 时会发生什么? 是什么促使应用获取新的模型属性,为什么这次没有起作用?

【问题讨论】:

  • 我曾经在 Heroku 上也遇到过这种情况 - stackoverflow.com/questions/7373039/…
  • 你在 Heroku 控制台上使用过“heroku run rake db:migrate”吗?
  • 我实际上在 Heroku 控制台上使用了`rake db:migrate`,这绕过了我不拥有该应用程序,因此没有权限正常进行 rake 的事实(即heroku run rake db:migrate)。在 Heroku 控制台上使用反引号绕过权限是我发现的一种技巧,我希望它们不会修复。 ;)

标签: ruby-on-rails heroku rake


【解决方案1】:

在新的 Rails 应用中,您可以看到以下内容

.../config/environments/development.rb

# In the development environment your application's code is reloaded on
# every request.  This slows down response time but is perfect for development
# since you don't have to restart the web server when you make code changes.
config.cache_classes = false

.../config/environments/production.rb

# Code is not reloaded between requests
config.cache_classes = true

【讨论】:

  • 我认为不会是这样。通常,当您在 Heroku 上运行 rake db:migrate 时,它确实会获取更改(如 OP 所说),无论该设置设置为什么。
  • 所以也许这就是导致生产重新加载类的原因,但是有一个错误 rename_column 不会触发设置...
猜你喜欢
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
  • 2014-07-10
  • 2016-06-18
相关资源
最近更新 更多