【发布时间】:2014-04-14 22:30:20
【问题描述】:
我正在部署一个 Rails 4.0 应用程序,其中包含 HTML 部分模板作为我们前端 javascript 框架的资产。尽管这些模板是资产管道的一部分并且已正确预编译,但当我从 js 文件中的嵌入式 ruby 调用 asset_path 时,它会返回我们模板的路径没有指纹。
我很确定这纯粹是一个资产管道问题,但为了让您全面了解我们的技术堆栈:我们将 Rails 4.0、Ruby 2.1、AngularJS 用于我们的前端 MVC 框架,AssetSync 用于在 Rails 和我们的 CDN 之间同步我们的资产。
发生这种情况的示例(在 app/assets/application.js.erb 中包含的文件中:
$routeProvider
.when('/', {
templateUrl: "<%= asset_path 'home.html' %>",
controller: "HomeController"
});
这在本地工作得很好,但是一旦config.assets.digest = true 投入生产,对asset_path 的调用就不会正确考虑指纹。模板位于新子目录templates 内的app/assets 目录中。所以在上面的例子中,home.html 资源位于app/assets/templates/home.html。那时我们的 javascript 本身已经预编译,所以我认为这可能是资产预编译顺序的问题。
我注意到 Rails Github 上的一些问题(1、2、3)和一些关于指纹设置不正确的 SO 帖子(1、2),但是找不到任何关于他们根本不包括在内的信息...
您可以提供的任何帮助或想法将不胜感激。
编辑 4/15:忘记包含我的应用程序 javascript 文件中的扩展名包含 .erb (app/assets/application.js.erb)。感谢亚历克斯抓住了这一点。我已经在上面更新了。
另外,按照this article on Heroku 中的说明,我确认在生产环境中运行的Rails 控制台中运行puts helper.asset_path("home.html") 会打印该资产的正确指纹URL。
【问题讨论】:
标签: ruby-on-rails angularjs ruby-on-rails-4 asset-pipeline