0

我最近在 Heroku 上放了一个我一直在开发的 Rails 应用程序。当我推送到我的 Heroku git 存储库时,它会运行资产编译作为生成 slug 的一部分。它在这里失败并出现以下错误:

could not connect to server: Connection refused
Is the server running on host "127.0.0.1" and accepting
TCP/IP connections on port xxxx?

问题是 rake 任务rake assets:precompile正在尝试连接到数据库,而我的应用程序在 slug 编译期间无权访问配置变量。我在 Heroku 的故障排除文档中找到了这些信息,并在我的文件中添加了规定的修复application.rb

config.assets.initialize_on_precompile = false

现在我的资产已正确编译,并且我的 gem 供应商/资产中的图像可用。

问题

  1. 为什么资产编译 rake 任务首先尝试连接到数据库?
  2. Heroku 还允许在本地编译资产并添加到 git 存储库或在运行时。我相信这其他两个选项不会遇到相同的问题,因为它只发生在 slug 编译期间。这两个有什么优势吗?
4

2 回答 2

1
  1. 该任务可能会依赖于:environment,它将加载您的整个应用程序,包括建立数据库连接的启动代码。

  2. 资产预编译旨在缩短请求时间 - rails 不必在每次请求时都编译资产。如果您在本地编译资产,则您使用的是您自己的机器,这很可能比 heroku 环境更快。您可以轻松地使用挂钩自动进行编译。

于 2012-12-31T14:13:45.333 回答
0

config.initialize_on_precompile 告诉 rake 在资产编译任务期间是否加载完整的 rails 应用程序,包括连接到数据库。至于在本地编译,不,这样做没有多大好处。

于 2012-12-31T14:12:31.353 回答