Rails / Heroku / Cloudcontrol:忽略预编译资产清单

Rails / Heroku / Cloudcontrol: Precompiled assets manifest ignored

我目前正在解决资产管道预编译并将其推送到服务器的问题。我在 rails 4.2.3 和 ruby 2.2.0!

我使用

预编译我的资产
RAILS_ENV=production bundle exec rake assets:precompile

并成功创建了几个文件,包括 .sprockets-manifest-... 文件。

如果我现在尝试推送应用程序,似乎未检测到清单文件 - 我通常遇到的 "assets cannot be compiled" 问题(我进行预编译的原因)发生了:

   Preparing app for Rails asset pipeline
   Running: rake assets:precompile
   rake aborted!
   Mysql2::Error: Can't connect to MySQL server on '127.0.0.1' (111)

我很确定这以前有效,但不知何故 - 也许通过升级到 rails 4.2.3,它现在失败了...

感谢任何形式的帮助!

附加凭证,如数据库在构建期间不可用。在 cloudControl you can detect if you're inside the build process by reading the BUILDPACK_RUNNING environment variable. See the Rails notes 上举个例子。

推荐的方式是让buildpack在推送时编译资产。但是您需要确保 Rails 没有尝试连接到数据库。这是关于此的 related SO question

如果您想在本地预编译但未检测到,我建议您检查清单和预编译资产是否已提交到存储库。一个常见的陷阱是 .gitignore 文件。

链轮 gem 版本 < 3.x 的使用为我解决了这个问题。

随着新版本(> 3.x),清单文件的名称已更改为.sprockets-manifest-xxxx.json!因此,无法正确识别预编译资产。对于旧版本,使用旧名称 .manifest-xxxx.json 并识别预编译资产。