bundle exec rake assets: прекомпиляция завершается неудачно с `неожиданным токеном` - PullRequest
10 голосов
/ 13 января 2012

Я готов развернуть приложение 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
//
// N.B. jQuery requires have to come before this:
//= require active_scaffold

Я использую компрессор по умолчанию, т.е. uglifier.

Я обнаружил, что если я изменю config.assets.compress на false в config/environments/production.rb, то он будет работать нормально, но, конечно, мое приложение будет работать лучше, если я найду способ сохранить его как true.

Я посмотрел на рейк-ресурсов: прекомпиляция не работает (rails 3.1.1) , и я не думаю, что это дубликат, потому что ошибка undefined: Unexpected token: operator (<).

Есть идеи? Я смутно подозрительно отношусь к тем символам Юникода в коде jQuery, но я не уверен, как доказать или опровергнуть, что они вызывают проблему.

Ответы [ 3 ]

20 голосов
/ 16 марта 2012

У меня была эта точная та же проблема, и я решил ее, вот подробности:

Когда вы включаете один или несколько файлов javascript в вашу среду Rails 3.1 с использованием application.js и //= require ..., Rails обернет содержимое вашего файла <script> ..filecontents.. </script>. Вы можете убедиться в этом, запустив свой сайт в режиме разработки и выполнив View | Источник.

Проблема в том, что в режиме разработки не фактически использует этот скрипт, он может показаться для нормальной работы. Но, по сути, у вас есть <script><script> ..filecontents.. </script></script>.

Однако, когда вы пытаетесь ПРЕКРАТИРОВАТЬ ресурсы, что-то в этом процессе компиляции (извините - я не знаю, что именно) застревает на «<» во внутреннем токене сценария. </p>

Дважды проверьте включенные файлы .js и, если какой-либо из них обернут <script> ... </script>, удалите эти окружающие теги.

Вы должны увидеть, что в Development все выглядит нормально, если вы просматриваете источник страницы. И когда вы прекомпилируете свои ресурсы, ошибка должна исчезнуть.

Я столкнулся с этой проблемой из-за рекомендованного Google фрагмента javascript google-analytics, и удаление оболочки сценариев из включенного файла решило проблему.

6 голосов
/ 16 марта 2016

Вот как я отлаживал это.

Локально, запустите это

RAILS_ENV=production bundle exec rake assets:precompile

Попытайтесь выяснить, где он задыхается (сценарий прямо перед тем, как засорение - это файл, который вы хотите просмотреть). Посмотри на все необходимое.

В моем случае у меня был файл, который заканчивался на .js, когда он должен был быть .jsx, и это то, что исправило его.

0 голосов
/ 02 марта 2016

У меня была та же проблема.

Несмотря на то, что у меня не было тега <script> в моих файлах javascript, предложение Дейва мне очень помогло!

Мне удалось обнаружитькомментарий к внешней библиотеке, которую я загружал в свой application.js:

<!-- Hotjar Tracking Code for (...) ->

Этот единственный комментарий сломал мое сжатие uglifier, и мне потребовалось много времени, чтобы найти егои даже, возможно, думаю, что это был виновник.

Итак, также следите за комментариями в начале файлов JS, , поскольку это может нарушить сжатие.

...