如何对JS文件进行asset:precompile? Rails 3.1

3

问题:

如何让资源管道处理所有的.js文件?(我希望它们可以单独提供服务,而不是捆绑在application.js中)

我的页面尝试引用很多javascript文件,但是我却得到了大量404错误:

GET http://<myStagingServer>.heroku.com/assets/<javascriptFilename1_MD5fingerprint> 404 (Not Found)
GET http://<myStagingServer>.heroku.com/assets/<SubDir>/<javascriptFilename2_MD5fingerprint> 404 (Not Found)

我尝试将这个添加到config/application.rb中:
config.assets.precompile << '*.js'

但是就我所知,那并没有起任何作用。

背景:

我正在将 Rails 3.0 升级到 3.1 并启用资源管道。

目前的亮点:

  • 从 Bamboo 切换到 Heroku 的 Cedar 栈:heroku create --stack cedar
  • 将生产服务器切换为 "thin",解决了各种问题:gem 'thin'
  • 将我的资产从public/assets移动到 app/assets,更新代码中的引用以使用 stylesheet_link_tagjavascript_include_tag。(加上我为图片所做的任何事情——它们能正常工作。)
  • 删除 x_sendfile_header 配置选项,因为Heroku 不支持它

相关文件:

//  
// application.js  
//  
//= require_self  
//  

我不知道对于.js和.css文件来说,编译是什么意思。我觉得我要在这里学到一些东西。 - duffymo
展示你的 application.js/css 文件。 - Sergio Tulentsev
@duffymo:嘿——我的意思只是我希望它们被Sprockets(我想)拾取,给予MD5指纹,然后移动到适当的文件夹中。 - thewillcole
我认为我会重新措辞我的问题,除非这是Rails爱好者常用的词语。 - duffymo
@SergioTulentsev,我刚刚注意到我一直在使用“require_tree .”而不是“require_self”在application.js中,所以我进行了更改。现在我的开发环境可以工作了,但是我在staging/production上仍然会遇到错误。 - thewillcole
应该会更好吧。你可以从收到的反馈中得知。 - duffymo
2个回答

4

天啊,我找到问题了:

带有句点的javascript和样式表文件名需要明确指定扩展名

例如:

# WORKS
javascript_include_tag "application"
stylesheet_link_tag "application"

# BROKEN
javascript_include_tag "jueryui.custom"
stylesheet_link_tag "jueryui.custom"

# WORKS
javascript_include_tag "jueryui.custom.js"
stylesheet_link_tag "jueryui.custom.css"

我想我能理解这个问题,但我认为在任何资源管道教程中都没有很好地记录它。难道说在资产文件名中不应该有句点是常识吗?


0

谢谢,但我想逐个复制这些文件,而不是将它们捆绑到应用程序资产文件中。你指出了后者的正确方式。 - thewillcole

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接