web-dev-qa-db-ja.com

「レーキアセット:プリコンパイル」はpuncエラーを出します

制作用にアセットをプリコンパイルしようとしていますが、Railsは協力していないようです。

$ bundle exec rake assets:precompile
/home/drderp/.rvm/rubies/Ruby-1.9.3-p194/bin/Ruby /home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/bin/rake assets:precompile:all Rails_ENV=production Rails_GROUPS=assets
rake aborted!
Unexpected token punc, expected punc (line: 213, col: 13, pos: 5986)

Error
    at new JS_Parse_Error (<eval>:1720:22)
    at js_error (<eval>:1728:15)
    at croak (<eval>:2189:17)
    at token_error (<eval>:2196:17)
    at expect_token (<eval>:2209:17)
    at Object.expect (<eval>:2212:40)
    at Object.1 (<eval>:2763:38)
    at prog1 (<eval>:2770:28)
    at <eval>:2560:51
    at maybe_unary (<eval>:2665:27)
  (in /home/drderp/projects/p/app/assets/javascripts/application.js)

Tasks: TOP => assets:precompile:primary
(See full trace by running task with --trace)
rake aborted!
Command failed with status (1): [/home/drderp/.rvm/rubies/Ruby-1.9.3-p194/b...]

Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

これは、application.jsの内容全体です。

// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
// Since javascript, no matter what order you load it in, executes in different order, it doesn't
// matter
//
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
// GO AFTER THE REQUIRES BELOW.
//
//= require jquery

Ruby 1.9.3で実行されているRailsバージョン3.2.8。

編集

bundle exec rake assets:precompile --trace、リクエストに応じて:

$ bundle exec rake assets:precompile --trace
** Invoke assets:precompile (first_time)
** Execute assets:precompile
/home/drderp/.rvm/rubies/Ruby-1.9.3-p194/bin/Ruby /home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/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!
Unexpected token punc, expected punc (line: 213, col: 13, pos: 5986)

Error
    at new JS_Parse_Error (<eval>:1720:22)
    at js_error (<eval>:1728:15)
    at croak (<eval>:2189:17)
    at token_error (<eval>:2196:17)
    at expect_token (<eval>:2209:17)
    at Object.expect (<eval>:2212:40)
    at Object.1 (<eval>:2763:38)
    at prog1 (<eval>:2770:28)
    at <eval>:2560:51
    at maybe_unary (<eval>:2665:27)
  (in /home/drderp/projects/p/app/assets/javascripts/application.js)
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/Ruby_racer_runtime.rb:34:in `rescue in block in eval'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/Ruby_racer_runtime.rb:28:in `block in eval'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/Ruby_racer_runtime.rb:80:in `block in lock'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/therubyracer-0.10.2/lib/v8/c/locker.rb:13:in `Locker'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/Ruby_racer_runtime.rb:78:in `lock'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/Ruby_racer_runtime.rb:27:in `eval'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/execjs-1.4.0/lib/execjs/Ruby_racer_runtime.rb:19:in `exec'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/uglifier-1.3.0/lib/uglifier.rb:100:in `compile'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/sprockets/compressors.rb:74:in `compress'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/processing.rb:265:in `block in js_compressor='
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/processor.rb:29:in `call'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/processor.rb:29:in `evaluate'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/tilt-1.3.3/lib/tilt/template.rb:76:in `render'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/context.rb:177:in `block in evaluate'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/context.rb:174:in `each'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/context.rb:174:in `evaluate'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/bundled_asset.rb:26:in `initialize'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:244:in `new'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:244:in `build_asset'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/index.rb:89:in `block in build_asset'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/caching.rb:19:in `cache_asset'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/index.rb:88:in `build_asset'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:163:in `find_asset'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/index.rb:56:in `find_asset'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/sprockets/static_compiler.rb:23:in `block in compile'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:212:in `block in each_logical_path'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:200:in `block (2 levels) in each_file'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:190:in `each'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:190:in `each_entry'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:198:in `block in each_file'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:197:in `each'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:197:in `each_file'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/sprockets-2.1.3/lib/sprockets/base.rb:210:in `each_logical_path'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/sprockets/static_compiler.rb:18:in `compile'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/sprockets/assets.rake:56:in `internal_precompile'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/sprockets/assets.rake:70:in `block (3 levels) in <top (required)>'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/home/drderp/.rvm/rubies/Ruby-1.9.3-p194/lib/Ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/sprockets/assets.rake:60:in `block (3 levels) in <top (required)>'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/home/drderp/.rvm/rubies/Ruby-1.9.3-p194/lib/Ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/bin/rake:19:in `load'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/bin/rake:19:in `<main>'
Tasks: TOP => assets:precompile:primary
rake aborted!
Command failed with status (1): [/home/drderp/.rvm/rubies/Ruby-1.9.3-p194/b...]
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/file_utils.rb:53:in `block in create_Shell_runner'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/file_utils.rb:45:in `call'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/file_utils.rb:45:in `sh'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/file_utils_ext.rb:39:in `sh'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/file_utils.rb:80:in `Ruby'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/file_utils_ext.rb:39:in `Ruby'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/sprockets/assets.rake:12:in `Ruby_rake_task'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/sprockets/assets.rake:21:in `invoke_or_reboot_rake_task'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/gems/actionpack-3.2.8/lib/sprockets/assets.rake:29:in `block (2 levels) in <top (required)>'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:158:in `block in invoke_with_call_chain'
/home/drderp/.rvm/rubies/Ruby-1.9.3-p194/lib/Ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/bin/rake:19:in `load'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194@global/bin/rake:19:in `<main>'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/bin/Ruby_noexec_wrapper:14:in `eval'
/home/drderp/.rvm/gems/Ruby-1.9.3-p194/bin/Ruby_noexec_wrapper:14:in `<main>'
Tasks: TOP => assets:precompile
45
Jeremy Rodi

Js-assetsで問題を見つけるより一般的な方法:Rails consoleを実行し、

JS_PATH = "app/assets/javascripts/**/*.js"; 
Dir[JS_PATH].each do |file_name|
  puts "\n#{file_name}"
  puts Uglifier.compile(File.read(file_name))
end
140
Sergey Reutskiy

私も同じ問題を抱えていました。ブラウザでJavaScriptコンソールを開き、エラーのある場所を確認します。 (これが私の問題の解決策だったため)、JSファイルの1つにエラーがあり、 ">"記号を使用したJSを記述した可能性が高いと思います。

頑張ってエラーハンティング。

18
Joseph Gill

私の場合、jsファイルでes6構文_()=>{...}_を使用していました。 function(){...}で置き換えると、問題が修正されました。

12
Ryo

これは恐ろしいことでした。ローカルコンピューターにJavaScriptエラーがないということは、アセットのコンパイルに問題があることを意味します。

これが私がそれを解決した方法です。

同様の質問のコメントで示唆されているように ExecJS :: ProgramError:Unexpected token punc"("、expected punc":"when running rake assets:precompile on production 、私はuglifierを削除しました(production.rb、コンプレッサーの行をコメントアウト)と圧縮を完全に組み合わせます(他のコンプレッサーで試してみましたが、yuiはあまり情報を提供しませんでした。閉鎖は私にヒントを与えるように見えましたが、あまり役に立ちませんでした)

次に、アセットをローカルで圧縮してから、本番環境にプッシュしました。 (ローカルで圧縮するには、Rails_ENV=production rake assets:precompileを使用します)

サーバーで実行したところ、JavaScriptエラーが発生しました。これは、基本的にはファイルのマージが誤っていた(主にコメント化されているため)。私はそれらのラインを取り除き、生産に戻しました。すべてが成功した。

Uglifierを元に戻し、public/assets/の下のプリコンパイル済みアセットを削除して、本番環境に戻しました。

これが誰かに役立つことを願っています!

9
Abdo

何らかの理由で、Herokuで、また上記のコードを実行してRailsコンソールでjavascriptを「醜く」した場合、エラーの行番号が報告されません!。 Ruby UglifyJSのラッパーです。ここでオンラインで使用できます https://skalman.github.io/UglifyJS-online/

だから私はちょうどここに問題のあるjsファイルをコピーして貼り付けました、そしてそれは行番号を報告しました。非常に簡単。

2
salza80

必要な詳細:

私たちにとって、それは私たちを実際の根本的なエラーに導き、それゆえ解決策を導く奇妙な小さなことでした。

uglifier gem v _4.1.x_があり、執筆時点で最新は_4.2.x_です。念のため、uglifierのバージョンを更新しました。

そして何が起こったのかこの新しいバージョンは実際に、コンパイルのエラーが発生していた実際のファイルの場所を吐き出し始めました。そして、エラーの原因がわかったら、それを修正します。

追加の詳細:

実際の問題は、いくつかの_js.erb_ファイルがあり、これらのファイルがいくつかのRailsコードを実行して、いくつかの環境データを入力することです。

_const config = {
  abc: <%= Figaro.env.abc %>,
  xyz: <%= Figaro.env.xyz %>
}
_

そして、私たちが得ていたエラーは:Uglifier::Error: Unexpected token: punc (,)でした。

ですから、何らかの理由でフィガロが私たちに望ましい値を与えていないのは明らかでした。私たちはそれを修正し続け、ランダムな値をハードコーディングすることで仮定をチェックしました。

ここに置くと、誰かを助けることができます。

PS: トップの回答 は素晴らしいですが、何らかの理由で、実際のエラーではなく、ランダムなjsx関連のエラーが発生しました。

これに注意を向けると、同じ問題と何が起こっていたのか、本番環境でアセットをプリコンパイルしたとき(そしてHerokuにプッシュしたとき)、いくつかのJSファイルが外国の文字とともに挿入されていました...

<<<<<<<<HEAD

===========

>>>>>>(random alphanumeric key)

私は自分のサイトディレクトリで "<<"のグローバル検索を実行し、影響を受けるファイルをすばやく見つけてこれらの用語を削除しました-すべてうまくいきました。

2
thegreengiant

私の問題は、2つの成功呼び出しでした。

最初はmqtt onSuccessでした:

onSuccess() {
  console.log("mqtt connected")
};

私が解決したこと:

onSuccess: function() {
  console.log("mqtt connected")
};

2つ目はAjaxの成功でした。リンターはあなたを表示します

エラー:予想されるメソッドの省略形

しかし、すべてが正しく動作します。

1

アプリケーションに追加した新しいJSファイルに、Bowerによって追加されたプラグインやその他が含まれていることを確認します。

1つずつ追加して、問題のあるファイルを見つけてください。私の場合はanchor-scroll.jsでした。 anchor-scroll.minを使用するように変更すると、rakeは正常に実行されます。

これを変える:

//= require anchor-scroll/scroll

ために:

//= require anchor-scroll/scroll.min
1
monteirobrena