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

时间:2015-08-12 23:53:22

标签: ruby-on-rails ruby heroku asset-pipeline cloudcontrol

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

我用

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

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

如果我现在尝试推送应用程序,看起来似乎没有检测到清单文件 - 我通常的“资产无法编译”问题(我预编译的原因)发生:

   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,现在它失败了......

我感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

加载项凭据(如数据库)在构建期间不可用。在cloudControl上,您可以通过阅读server { client_header_buffer_size 1k; large_client_header_buffers 2 1k; location / { client_body_buffer_size 10K; client_max_body_size 8m; proxy_pass http://127.0.0.1:8000; } } 环境变量来检测您是否在构建过程中。有关示例,请参阅Rails notes

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

如果要在本地进行预编译并且未检测到此信息,我建议检查清单和预编译资产是否已提交到存储库。常见的陷阱是BUILDPACK_RUNNING文件。