将Rails应用程序部署到heroku后找不到静态文件

时间:2015-04-11 15:42:55

标签: ruby-on-rails asset-pipeline

我是整个资产管道概念的新手,我把第三方js文件(以及css和图像文件)放在vendor / assets文件夹中,让我快速举例说明我是如何做到的:

存储文件的位置: vendor/assets/javascript/plugins/isotope/isotope.pkgd.min.js

如何在application.js中引用它: //= require plugins/isotope/isotope.pkgd.min

以及它在index.html.erb中的引用方式 <script src="/assets/plugins/isotope/isotope.pkgd.min.js"></script>

它在本地运行得很好但是在我将应用程序部署到heroku之后,我发现http://myapp.herokuapp.com/assets/plugins/isotope/isotope.pkgd.min.js未找到错误,没有它,我的应用程序无效......我知道资产管道的一部分工作是将所有js文件(在application.js中引用的文件)压缩成一个单独的js文件,并不意味着我需要在html.erb中以不同的方式引用isotope.pkgd.min.js

1 个答案:

答案 0 :(得分:1)

调试资产管道问题有几个步骤。在部署之前,您没有提到您已完成资产预编译。 Heroku在自动部署时不会编译资产。这是他们关于此事的文本

  

如果在您的应用中检测到public / assets / manifest.yml,Heroku将假定您自己正在处理资产编译,并且不会尝试编译您的资产。 Rails 4使用名为public / assets / manifest-.json的文件。在这两个版本上,您可以通过运行$ rake assets来生成此文件:在本地预编译并将生成的文件检入Git。

https://devcenter.heroku.com/articles/rails-asset-pipeline

一个简单的测试是在Heroku部署之前预先编译你的资产(以及git checkin,如果你使用git push Heroku),看看是否解决了这个问题。

在您的开发平台上:

bundle rake exec assets:precompile RAILS_ENV=production