我最近在 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 供应商/资产中的图像可用。
问题
- 为什么资产编译 rake 任务首先尝试连接到数据库?
- Heroku 还允许在本地编译资产并添加到 git 存储库或在运行时。我相信这其他两个选项不会遇到相同的问题,因为它只发生在 slug 编译期间。这两个有什么优势吗?