我正在部署到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 (<)"
或者其他的东西。
所以,我的建议是:
不要压缩js文件,如果它没有很好的代码格式,在你的配置文件中设置“config.assets.compress = false”,@ Mike的回答。
尽可能使用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中删除它们。