我正在部署一个 Rails 4.0 应用程序,其中包含 HTML 部分模板作为我们前端 JavaScript 框架的资产。尽管这些模板是资产管道的一部分并且已正确预编译,但当我调用asset_path
从我们的 js 文件中嵌入的 ruby,它返回我们模板的路径without指纹。
我非常确定这纯粹是一个资产管道问题,但为了让您全面了解我们的技术堆栈:我们使用 Rails 4.0、Ruby 2.1、AngularJS 作为我们的前端 MVC 框架,并且资产同步在 Rails 和 CDN 之间同步我们的资产。
发生这种情况的示例(在包含在app/assets/application.js.erb
:
$routeProvider
.when('/', {
templateUrl: "<%= asset_path 'home.html' %>",
controller: "HomeController"
});
这在本地效果很好,但是一旦config.assets.digest = true
在生产中,调用asset_path
没有正确考虑指纹。模板位于app/assets
新子目录中的目录templates
。因此,在上面的示例中,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
)。感谢亚历克斯抓住了这一点。我已经在上面更新了。
另外,按照中的说明这篇关于 Heroku 的文章,我确认运行puts helper.asset_path("home.html")
从生产中运行的 Rails 控制台打印该资产的正确指纹 URL。