我正在尝试设置我的应用程序以通过 Amazon S3/Cloudfront CDN 提供 Assets 。它是一个 Rails 应用程序,我使用 asset_sync
gem 按照 this heroku document. 来实现此目的
我将我的项目推送到heroku,然后运行heroku run rake assets:precompile
。这给了我如下所示的输出:
I, [2013-09-20T21:19:06.506796 #2] INFO -- : Writing /app/public/assets/application-cb6347d3ce9380e02c37364b541fd8ae.js
I, [2013-09-20T21:19:19.979570 #2] INFO -- : Writing /app/public/assets/application-9dc3068c1bf9290c7eb0493fd36b3587.css
[WARNING] fog: followed redirect to abc123.s3-us-west-1.amazonaws.com, connecting to the matching region will be more performant
[WARNING] fog: followed redirect to abc123.s3-us-west-1.amazonaws.com, connecting to the matching region will be more performant
请注意,它为 JS 文件 cb6347d3ce9380e02c37364b541fd8ae.js
写入的哈希值是正确的(因为我也在本地主机下的暂存中运行了此文件)。
问题是,当我在heroku上点击我的应用程序并检查源代码时,它包含的JS 50460076f4c6eb614a44b6b17323efa7.js
与之前编译的不同......
为什么 Heroku 没有选择正确的预编译资源来使用?我在本地部署并执行了所有相同的步骤,我的本地服务器毫无问题地获取了正确的 JS。
感谢您的帮助!
最佳答案
过了一段时间,我意识到这是因为我之前在本地编译了 Assets 并将其推上来。因此,Heroku 没有尝试在生产中进行预编译,而只是使用之前 checkin 的旧的 manifest.json。
你可以在本地重新编译并推送它,或者运行rake assets:clobber
删除所有预编译资源,然后commit/push,heroku会意识到它需要预编译。之后,它应该使用正确的 list 文件,并且 Assets 应该正常显示。
我发现这篇博文对于了解情况非常有用:http://www.rubycoloredglasses.com/2013/08/precompiling-rails4-assets-when-deploying-to-heroku/
关于heroku - Heroku 中的 Asset_pipeline 对预编译的 javascript 使用了错误的 Assets 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18926095/