我在资产预编译方面有一个非常讨厌和持久的问题,我似乎无法自己解决。在某些没有错误的文件中,编译总是失败。例如,下面的错误位于仅包含注释的文件copies.js.coffee
中。如果我删除该文件,另一个文件将出错。我所有资产文件的类型都是us-ascii
- 任何文件中都没有奇怪的字符。我正在使用Rails 3.1.3。我已经尝试过使用Ruby 1.9.2和1.9.3 - 没有区别。
$ rake assets:precompile --trace
(in /cygdrive/c/Development/artwork2)
** Invoke assets:precompile (first_time)
** Execute assets:precompile
/home/kari/.rvm/rubies/ruby-1.9.3-p0/bin/ruby.exe /home/kari/.rvm/gems/ruby-1.9.3-p0/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 tmp:cache:clear (first_time)
** Execute tmp:cache:clear
** Execute assets:precompile:primary
rake aborted!
湉異⁴牅潲㩲唠歮潮湷漠瑰潩⼢祣摧楲敶振唯敳獲欯牡⽩灁䑰瑡⽡潌慣⽬敔灭支數橣㉳〲ㄱⴲ㔵〲㐭瀶湸⸱獪•灳捥晩敩
(in /cygdrive/c/Development/artwork2/app/assets/javascripts/copies.js.coffee)
/home/kari/.rvm/gems/ruby-1.9.3-p0/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:150:in `exec_runtime'
/home/kari/.rvm/gems/ruby-1.9.3-p0/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:27:in `block in exec'
/home/kari/.rvm/gems/ruby-1.9.3-p0/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:40:in `compile_to_tempfile'
/home/kari/.rvm/gems/ruby-1.9.3-p0/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:26:in `exec'
/home/kari/.rvm/gems/ruby-1.9.3-p0/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:18:in `eval'
/home/kari/.rvm/gems/ruby-1.9.3-p0/gems/execjs-1.2.13/lib/execjs/external_runtime.rb:32:in `call'
/home/kari/.rvm/gems/ruby-1.9.3-p0/gems/coffee-script-2.2.0/lib/coffee_script.rb:57:in `compile'
/home/kari/.rvm/gems/ruby-1.9.3-p0/gems/tilt-1.3.3/lib/tilt/coffee.rb:46:in `evaluate'
这真的很烦人,我无法挺身而出。我几乎尝试了从这里和其他地方找到的所有东西。
另外一点:我在cygwin和Ubuntu的rvm下都尝试了这两种方法。
答案 0 :(得分:2)
从外观上看,其中一个javascript文件在某种程度上无效。
我假设一切都在开发模式下正常运行,即一切在浏览器中是否正常运行?
如果是这样,代码在开发中正确运行,因为所有文件都以调试模式提供 - 它们不会连接或压缩。编译时,首先将它们连接起来然后进行压缩。
问题可能是其中一个包含文件中的语法错误,其中包含缺少分号的形式。 Javascript压缩器需要这些来确定一个代码块的结束位置和另一个代码块的开始位置。首先要检查的是插件定义的结束。假设问题出在一个文件中,你只能删除一个文件,编译它直到它运行,你就有罪魁祸首。
答案 1 :(得分:1)
问题出在咖啡轨道上。我从资产中删除了所有生成的咖啡文件。它们只包含生成的注释,没有别的。之后,资产按原样编制。某处肯定有一个坏的错误。花了几个小时。谢谢Richard建议的方法。