bundle exec rake assets:预编译失败,带有’unexpected token`

我准备将我的Rails 3.1应用程序部署到生产环境中,因为我正在使用资产管道, 所以我需要预编译我的资产 。 但是,当我尝试这个时,我得到一个显然与编译jQuery有关的错误:

$ bundle exec rake --trace assets:precompile ** Invoke assets:precompile (first_time) ** Execute assets:precompile /home/adam/.rvm/rubies/ruby-1.9.3-p0/bin/ruby /home/adam/.rvm/gems/ruby-1.9.3-p0@rails-3.1/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets --trace ** Invoke assets:precompile:all (first_time) ** Execute assets:precompile:all ** Invoke assets:precompile:primary (first_time) ** Invoke assets:environment (first_time) ** Execute assets:environment ** Invoke environment (first_time) ** Execute environment ** Invoke tmp:cache:clear (first_time) ** Execute tmp:cache:clear ** Execute assets:precompile:primary rake aborted! 399: unexpected token at '"/*!\u000a * jQuery JavaScript Library v1.7.1\u000a * http://jquery.com/\u000a *\u000a * Copyright 2011, John Resig\u000a * Dual licensed under the MIT or GPL Version 2 licenses.\u000a * http://jquery.org/license\u000a *\u000a * Includes Sizzle.js\u000a * http://sizzlejs.com/\u000a * Copyright 2011, The Dojo Foundation\u000a * Released under the MIT, BSD, and GPL Licenses.\u000a *\u000a * Date: Mon Nov 21 21:11:03 2011 -0500\u000a */\u000afunction addActiveScaffoldPageToHistory(a,b){if(typeof 

[剪掉很多东西]

  (in /data/music/RotC/eventbook/app/assets/javascripts/application.js) /home/adam/.rvm/gems/ruby-1.9.3-p0@rails-3.1/gems/json-1.6.4/lib/json/common.rb:148:in `parse' /home/adam/.rvm/gems/ruby-1.9.3-p0@rails-3.1/gems/json-1.6.4/lib/json/common.rb:148:in `parse' /home/adam/.rvm/gems/ruby-1.9.3-p0@rails-3.1/gems/multi_json-1.0.4/lib/multi_json/engines/json_common.rb:9:in `decode' /home/adam/.rvm/gems/ruby-1.9.3-p0@rails-3.1/gems/multi_json-1.0.4/lib/multi_json.rb:76:in `decode' /home/adam/.rvm/gems/ruby-1.9.3-p0@rails-3.1/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:61:in `extract_result' /home/adam/.rvm/gems/ruby-1.9.3-p0@rails-3.1/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:27:in `block in exec' /home/adam/.rvm/gems/ruby-1.9.3-p0@rails-3.1/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:40:in `compile_to_tempfile' /home/adam/.rvm/gems/ruby-1.9.3-p0@rails-3.1/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:26:in `exec' 

[剪断更多的东西]

这是我的application.js

 //= require jquery //= require jquery_ujs //= require jquery-ui // // NB jQuery requires have to come before this: //= require active_scaffold 

我正在使用默认压缩器,即uglifier

我发现如果我在config/environments/production.rb中将config.assets.compress更改为false ,那么它工作正常,但当然我的应用程序会表现得更好,如果我能找到一种方法来保持它为true

我看过rake资产:预编译不起作用(rails 3.1.1) ,我不认为它是重复的,因为错误是undefined: Unexpected token: operator (<)

有任何想法吗? 我模糊地怀疑jQuery代码中的那些unicode字符,但我不确定如何certificate或反驳它们导致问题。

我有完全相同的问题并解决了它,这里有详细信息:

当您使用application.js和//= require ...在Rails 3.1环境中包含一个或多个javascript文件时,Rails将使用包装文件的内容。 您可以通过在开发模式下运行站点并执行View |来validation这一点 资源。

问题是,在开发模式下,如果您实际上没有使用该脚本,它可能看起来工作正常。 但是,基本上,你所拥有的是

但是,当您尝试预处理资产时,编译过程中的某些内容(抱歉 – 我不知道到底是什么)在内部脚本标记中的“<”上嘎然而止。

仔细检查包含的.js文件,如果其中任何文件被包装,则删除那些周围的标签。

您应该看到,在开发中,如果您查看页面源,一切看起来仍然很好。 而且,当您预编译资产时,错误应该消失。

我使用Google推荐的google-analytics javascript片段遇到了这个问题,并从包含的文件中删除脚本包装器解决了这个问题。

这是我调试它的方式。

在本地,运行这个

RAILS_ENV=production bundle exec rake assets:precompile

试着找出它窒息的地方(窒息之前的脚本是你想看的文件)。 看看所有要求。

在我的情况下,我有一个以.js结尾的文件,当它应该是.jsx ,这就是修复它的原因。

我遇到了同样的问题。

尽管我的javascript文件中没有标签,但Dave的建议对我帮助很大!

我能够发现我在application.js中加载的外部库的注释: