耙资产:预编译不起作用(rails 3.1.1)

我正在部署到heroku,但我看到的CSS文件没有被送达(他们也不能在heroku上find)。

我读到,我需要做耙子资产:首先在本地进行预编译,但当我这样做时,我得到:

C:\project>bundle exec rake assets:precompile --trace ** Invoke assets:precompile (first_time) ** Execute assets:precompile rake aborted! undefined: Unexpected token: operator (<) (in C:/project/app/assets/javascripts/application.js) Tasks: TOP => assets:precompile (See full trace by running task with --trace) 

我在application.js中没有任何东西,所以我不明白错误在哪里。

application.js是

 // This is a manifest file that'll be compiled into including all the files listed below. // Add new JavaScript/Coffee code in separate files in this directory and they'll automatically // be included in the compiled file accessible from http://example.com/assets/application.js // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the // the compiled file. // //= require jquery //= require jquery_ujs //= require_tree . 

谢谢

更新

如果删除一个.js.erb文件,我得到以下错误

 C:\project>bundle exec rake assets:precompile RAILS_ENV=production --trace ** Invoke assets:precompile (first_time) ** Execute assets:precompile rake aborted! 706: unexpected token at 'C:\Users\me\AppData\Local\Temp\execjs20111021-6448-ei2nm3.js(2, 3) Microsoft JScript runtime error: Out of memory ' (in C:/project/app/assets/javascripts/application.js) Tasks: TOP => assets:precompile (See full trace by running task with --trace) 

仍然有问题的erb css和js文件不编译…

这似乎并没有结束..谢谢

我认为这是由外部JavaScript文件,这是不是很好的代码格式。 例如

 function say_hi(){ // NOTICE that there's no semi-colon there! name = "Jim" alert("hi" + name ) } 

当在预编译的时候,你的代码会放在1行,因为没有必要的分号,你生成的js文件可能包含错误,比如

 "undefined: Unexpected token: operator (<)" 

或者其他的东西。

所以,我的建议是:

  1. 不要压缩js文件,如果它没有很好的代码格式,在你的配置文件中设置“config.assets.compress = false”,@ Mike的回答。

  2. 尽可能使用coffeescript,这将帮助您生成格式良好的代码。 (我不是咖啡大师,所以如果我错了,请纠正我)

我一直在努力尝试部署到临时服务器。 对我来说,解决方案是确保你的config/environments/[your_environment].rb文件中包含以下内容:

 config.assets.compress = false 

默认情况下,压缩机在生产以外的环境中不可用,这就是预编译失败的原因。

我在这里有同样的问题! 在我的情况下,是什么原因导致这个问题,我添加一个新的JS文件到JavaScript文件夹,并得到了一个undefined: Unexpected token: operator (<)错误,当我试图运行预编译命令。 所以我看着新的js文件,发现该文件中有一个HTML样式的注释<!-- --> 。 我删除它,现在的生活是美好的!

所以试着找出你的js文件中是否有HTML样式的注释<!-- --> ,然后删除这些注释。 当一些JS代码从html文件复制时,这是特别真实的!

我遇到了同样的问题,原来是因为包含了一个嵌入的javascript,其格式为: <!-- comment -->我已经删除了它们,它的功能就像一个魅力! 希望这有助于。

我注意到的一件事是它应该是:

 RAILS_ENV=production bundle exec rake assets:precompile 

RAILS_ENV的定义需要在bundle命令之前执行,因为它为执行bundle命令的shell设置shell(bash)环境变量。

你的问题似乎与此有关:

https://github.com/bradphelan/jasminerice/issues/21

也可以看看:

http://guides.rubyonrails.org/asset_pipeline.html

Heroku rails 3.1应用程序 – 本地编译资产与编译子弹编译期间的资产

在Heroku上编译Rails 3 CSS资源时出错

遇到同样的错误后,我花了最后1个小时搔了搔头。 问题是您的application.js中的以下行:

 //= require_tree . 

这会导致你的app/assets/javascripts/目录中的所有文件被包含,这可能是目录中的另一个文件中存在某种错误。 我删除了这一行,并得到我的资产预编译(我没有真的使用application.js)。 所以,在application.js包含的文件中查找一个bug

我有一个类似的问题:

意外的标记:运算符(<<)

原来,这是Git中合并冲突的遗留文件。 冲突留下一个.orig文件,其中包含“<<<<<<<<<<<”“Git发现要合并的代码块。

由于资产管道指令

// = require_tree。

application.js中 ,javascript文件夹中的所有文件(包括.orig文件)都会在推送到像Heroku这样的服务器上进行预编译。 预编译器找到“<<<<<”的错误。

所以我的解决方案是找到所有.orig文件,并使用'git rm filename'方法从Git中删除它们。