0

我一直在将代码推送到 Heroku 时遇到问题,并且阶段更改会破坏我的应用程序。它在本地工作,但是当我推送到 Heroku 时,我注意到应用程序切换到生产阶段并中断。

有没有办法只使用一个阶段,即在我的生产阶段本地开发?我不需要版本历史。或者,我可以简单地将我的开发阶段推到 Heroku 吗?

在本地,我正在运行 OSX 10.8.1、Ruby 1.9.3p194 和 Rails 3.2.8。

该应用程序是一个基于我一直在学习和拼凑的东西的最小博客。它利用 SQLite 进行存储。

4

3 回答 3

3

只使用一个环境是个坏主意。不要这样做。

您的本地/开发和生产环境可能存在差异,这就是您使用 2 个不同环境的原因,因此您可以在配置文件中捕获它们。许多缓存、编译资产和调试只发生在 dev 或 prod 中,并且您希望它们的行为不同。

相反,您需要调试 prod 和 dev(heroku 和本地)中的不同之处,并更改您的应用程序以解决这些差异。

例如,Heroku 不支持 sqlite - 它默认使用 postgres。

因此,您需要在 Gemfile 中使用 sqlite 进行开发,并将 pg gem 用于生产,或者(我强烈建议)在开发中也使用 postgres(https://devcenter.heroku.com/articles/how-do- i-use-sqlite3-for-development)。

如果您选择继续使用 sqlite 进行开发,您的 Gemfile 应如下所示:

group :development do
  gem 'sqlite3'
end

group :production do
  gem 'pg'
end
于 2012-09-20T20:15:42.063 回答
0

如果您想在本地机器上尝试生产模式,请像这样启动服务器:

rails server -e production

希望这能让你在推向 Heroku 之前抓住一些问题。

安德鲁的回答是关键。为了您的方便,开发模式下的缓存较少。生产模式运行效率更高,但将是开发的主要痛苦。(例如,您将经常需要重新加载缓存和重新编译资产。)您不想在生产中运行开发模式,因为您的应用程序运行速度非常缓慢。

希望这能让您了解运行一个环境而不是另一个环境之间的权衡。权衡的因素主要是开发便利性与性能的问题。

于 2012-09-20T20:26:38.577 回答
0

没有看到为什么你的应用程序在推送到 Heroku 时会中断,我猜这是几个问题之一。

  • 首先,您必须为您的数据库使用 Postgres,即:至少gem 'pg'在您的组中。Gemfile:production

  • 其次,必须预编译资产或必须更改配置设置以允许在不初始化应用程序的情况下编译资产:

    rake assets:precompile

    或者

    添加config.assets.initialize_on_precompile = false到您的config/environments/production.rb文件中。

我通常使用rake assets:precompile然后将资产添加到我的 git 存储库中,尽管许多人会争辩(我同意)将这些文件添加到您的存储库通常不是最好的主意。

于 2012-09-20T20:44:26.940 回答