web-dev-qa-db-fra.com

"rake assets: precompile" donne une erreur punc

J'essaie de précompiler mes actifs pour la production, mais Rails ne semble pas coopérer.

$ 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)

Voici l'intégralité du contenu de 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

Rails version 3.2.8, fonctionnant sur Ruby 1.9.3.

modifier :

Voici bundle exec rake assets:precompile --trace, comme demandé:

$ 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

Une manière plus universelle de trouver le problème dans js-assets: Exécutez Rails console et:

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

J'ai eu le même problème. Ouvrez votre console Javascript dans le navigateur et voyez où il y a une erreur. Je soupçonne (parce que c'était la solution à mon problème) que l'un de vos fichiers JS contient une erreur et il est très probable que le JS que vous avez écrit utilise un symbole ">".

Bonne chance à la chasse aux erreurs.

18
Joseph Gill

Dans mon cas, j'utilisais la syntaxe es6 ()=>{...} Dans le fichier js. Le remplacer par function(){...} a résolu le problème.

12
Ryo

C'était horrible; aucune erreur javascript sur mon ordinateur local ne signifie qu'il y a un problème avec la compilation des ressources.

Voici comment je l'ai résolu.

Comme suggéré dans les commentaires pour une question similaire ExecJS :: ProgramError: jeton inattendu punc "(", punc attendu ":" lors de l'exécution des actifs de râteau: précompilation en production , j'ai supprimé uglifier (dans production.rb, commentez la ligne du compresseur) et la compression. (J'avais essayé avec d'autres compresseurs; yui ne donnait pas beaucoup d'informations. La fermeture semblait me donner un indice mais n'a pas beaucoup aidé)

J'ai ensuite compressé les actifs localement, puis j'ai poussé à la production. (Pour compresser localement, utilisez Rails_ENV=production rake assets:precompile)

J'ai couru sur le serveur et c'est à ce moment que les erreurs javascript sont apparues. C'était essentiellement une fusion erronée de fichiers (principalement en raison d'un commentaire). Je me suis débarrassé de ces lignes et j'ai repoussé la production. Tout a réussi.

J'ai ramené uglifier, supprimé les actifs précompilés sous public/assets/ et repoussé à la production.

J'espère que ça aidera quelqu'un!

9
Abdo

Pour une raison quelconque, sur Heroku et aussi lorsque j'ai exécuté le code mentionné ci-dessus pour "uglifier" le javascript dans la console Rails, il ne rapporterait pas le numéro de ligne de l'erreur !. Il s'agit de juste un Ruby wrapper pour UglifyJS, que vous pouvez utiliser en ligne ici https://skalman.github.io/UglifyJS-online/ .

J'ai donc juste copié et collé le fichier js incriminé ici, et il a signalé le numéro de ligne. Très facile.

2
salza80

Détails nécessaires:

Pour nous, c'était une petite chose étrange qui nous mène à une erreur sous-jacente réelle, donc une solution.

Nous avions uglifier gem v 4.1.x Et le plus récent au moment de la rédaction est 4.2.x Nous avons mis à jour la version uglifier, juste au cas où.

Et ce qui s'est passé, c'est que cette nouvelle version a en fait commencé à cracher des emplacements de fichiers réels où l'erreur de compilation se produisait . Et quand nous savons d'où vient l'erreur, nous la corrigeons.

Détails supplémentaires:

Le problème réel était que nous avions des fichiers js.erb Et que ces fichiers exécutaient du code Rails pour remplir certaines données env, quelque chose comme:

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

Et l'erreur que nous obtenions était: Uglifier::Error: Unexpected token: punc (,).

Il était donc évident pour une raison quelconque que Figaro ne nous donnait pas nos valeurs souhaitées. Nous avons ensuite corrigé cela et vérifié notre hypothèse en codant en dur des valeurs aléatoires, qui ont compilé le JS avec succès.

Le mettre ici pour qu'il puisse aider quelqu'un.

PS: Top answer est super, mais pour une raison quelconque, cela nous a donné des erreurs aléatoires liées à jsx au lieu de nous donner une erreur réelle.

2

Juste un avertissement à ce sujet, j'ai eu le même problème et ce qui se passait, lors de la précompilation d'actifs dans l'environnement de production (et la transmission vers Heroku), plusieurs de mes fichiers JS étaient insérés avec des caractères étrangers, le long de ...

<<<<<<<<HEAD

===========

>>>>>>(random alphanumeric key)

Je viens de lancer une recherche globale dans le répertoire de mon site pour "<<" et j'ai rapidement trouvé les fichiers concernés et supprimé ces termes - tout fonctionnait bien.

2
thegreengiant

Mon problème était avec deux appels de réussite.

Le premier était mqtt onSuccess:

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

que j'ai résolu avec:

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

et le deuxième fut le succès de l'Ajax. Linter vous montrera

Erreur: raccourci de méthode attendu

mais tout fonctionnera correctement.

1
Radovan Skendzic

Vérifiez que les nouveaux fichiers JS que vous avez ajoutés dans votre application incluent des plugins et d'autres ajoutés par Bower ou quelque chose du genre.

Essayez d'ajouter un par un pour trouver quel fichier a un problème. Dans mon cas était dans anchor-scroll.js. Quand j'ai changé pour utiliser anchor-scroll.min le râteau fonctionne bien.

Change ça:

//= require anchor-scroll/scroll

Pour:

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