我正在部署到heroku但我看到没有提供css文件(它们也无法在heroku上找到)。
我读到我需要做rake资产:首先在本地预编译然后当我这样做时,我得到:
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文件未编译的问题......
这似乎没有结束.. 感谢
答案 0 :(得分:5)
我一直在努力尝试部署到临时服务器。适合我的解决方案是确保在config/environments/[your_environment].rb
文件中包含以下内容:
config.assets.compress = false
默认情况下,压缩器在生产以外的环境中不可用,这就是预编译失败的原因。
答案 1 :(得分:5)
我在这里有同样的问题!在我的情况下,导致此问题的原因是,我向javascript文件夹添加了一个新的JS文件,当我尝试运行预编译命令时出现undefined: Unexpected token: operator (<)
错误。所以我查看了新的js文件,发现该文件中有一个HTML样式注释<!-- -->
。我把它删除了,生活现在好了!
因此,请尝试找出js文件中是否存在任何HTML样式注释<!-- -->
,然后删除这些注释。当从html文件中复制一些JS代码时尤其如此!
答案 2 :(得分:3)
我认为这是由外部javascript文件引起的,该文件没有良好的代码格式。例如
function say_hi(){
// NOTICE that there's no semi-colon there!
name = "Jim"
alert("hi" + name )
}
在预编译下,你的代码会放入1行,因为没有必要的分号,你生成的js文件可能包含错误,比如
"undefined: Unexpected token: operator (<)"
或其他什么。
所以,我的建议是:
如果js文件的代码格式不正确,请不要压缩js文件,方法是在配置文件中设置“config.assets.compress = false”,然后按@ Mike的回答。
尽可能使用coffeescript,它将帮助您生成格式良好的代码。 (我不是coffeescript大师,所以如果我错了请纠正我)
答案 3 :(得分:3)
我遇到了同样的问题,结果是因为包含了一个嵌入式javascript,其中包含以下格式的评论:<!-- comment -->
我删除了它们,它就像一个魅力!希望这会有所帮助。
答案 4 :(得分:1)
我注意到的一件事应该是:
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 app - compiling assets locally vs compiling assets during slug compilation
答案 5 :(得分:1)
在遇到同样的错误后,我花了最后1个小时的时间挠头。问题是application.js中的以下行:
//= require_tree .
这会导致app/assets/javascripts/
目录中的所有文件都被包含在内,可能是目录中另一个文件中存在某种错误。我删除了该行,并将我的资产编译为预编译(我实际上并没有使用application.js)。因此,请查找application.js
答案 6 :(得分:0)
我遇到了类似的问题:
意外的令牌:运营商(&lt;&lt;&lt;)
这结果是Git中合并冲突的遗留文件。冲突会留下一个.orig文件,其中包含“&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt; Git在哪里找到要合并的代码块。
由于资产管道指令
application.js 中的// = require_tree。
,javascript文件夹中的所有文件(包括.orig文件)都会在推送到Heroku等服务器时进行预编译。预编译器发现“&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;
所以我的解决方案是找到所有.orig文件并使用'git rm filename'方法从Git中删除它们。