我目前正在解决预编译资产管道并将其推送到服务器上的问题。我在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,现在它失败了......
我感谢任何帮助!
答案 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
文件。