2012-09-25 15 views
40

Estoy tratando de precompilar mis activos para la producción, pero los rieles no parecen estar cooperando."activos de rake: precompilación" da error de punc

$ bundle exec rake assets:precompile 
/home/drderp/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /home/drderp/.rvm/gems/[email protected]/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) 

Este es el contenido completo 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 

rieles versión 3.2.8, que se ejecutan en Rubí 1.9.3.

edición:

Aquí es bundle exec rake assets:precompile --trace, conforme a lo solicitado:

$ 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/[email protected]/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/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute' 
/home/drderp/.rvm/gems/[email protected]/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/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain' 
/home/drderp/.rvm/gems/[email protected]/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/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute' 
/home/drderp/.rvm/gems/[email protected]/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/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>' 
/home/drderp/.rvm/gems/[email protected]/bin/rake:19:in `load' 
/home/drderp/.rvm/gems/[email protected]/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/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils.rb:53:in `block in create_shell_runner' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils.rb:45:in `call' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils.rb:45:in `sh' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils_ext.rb:39:in `sh' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/file_utils.rb:80:in `ruby' 
/home/drderp/.rvm/gems/[email protected]/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/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `call' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:205:in `block in execute' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `each' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:200:in `execute' 
/home/drderp/.rvm/gems/[email protected]/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/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:151:in `invoke_with_call_chain' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/task.rb:144:in `invoke' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:116:in `invoke_task' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block (2 levels) in top_level' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `each' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:94:in `block in top_level' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:88:in `top_level' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:66:in `block in run' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run' 
/home/drderp/.rvm/gems/[email protected]/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>' 
/home/drderp/.rvm/gems/[email protected]/bin/rake:19:in `load' 
/home/drderp/.rvm/gems/[email protected]/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 
+0

Intenta ejecutar como un paquete exec rake assets: precompile --trace ... podría ayudar a descubrir un archivo con mala puntuación en algún lugar – rossta

+0

@rossta, actualizó el OP con el resultado del comando. –

+0

¿Qué versión de jquery-rails se encuentra en su Gemfile? – rossta

Respuesta

-4

"/home/drderp/.rvm/rubies/ruby-1.9.3-p194/bin/ruby /home/drderp/.rvm/gems/[email protected]/bin/rake assets:precompile:all RAILS_ENV=production RAILS_GROUPS=assets"

Hay un espacio entre la parte en negrita (entre el rubí, la barra invertida, y el hogar).

No sé si esto fue un error tipográfico, pero podría ser su problema porque a Rails no le gustan los espacios en los nombres de los directorios. Cambie el nombre de esa carpeta e intente ejecutar su código nuevamente.

+4

There debería ser un espacio; no está en el nombre del archivo, estoy ejecutando el ejecutable de ruby, con la ruta absoluta al archivo de rastreo. –

18

Tuve este mismo problema. Abra su consola de Javascript en el navegador y vea dónde hay un error. Sospecho (porque fue la solución a mi problema), que uno de sus archivos JS tiene un error y es muy probable que sea cual sea el JS que escribió que usó un símbolo ">".

Buena suerte error de búsqueda.

+2

Lo bendigo. Mi caso era que tenía un archivo .js.erb dinámico.Al compilar los activos, el javascript se interpretó como si no hubiera 'ENV ['bla_bla']' dando un error de sintaxis. :) – tsikov

+1

En mi caso, era un archivo en 'app/assets/javascripts' en una joya que no tenía una extensión. – mooreds

2

Solo un aviso al respecto, tuve el mismo problema y lo que estaba sucediendo, al precompilar elementos en el entorno de producción (y presionar a Heroku) varios de mis archivos JS se insertaban con caracteres extraños, siguiendo las líneas de .. .

<<<<<<<<HEAD 

=========== 

>>>>>>(random alphanumeric key) 

que acaba de ejecutar una búsqueda global en mi directorio del sitio para "< <" y rápidamente se encuentran los archivos afectados & suprimen estos términos - todo funcionaba bien.

+1

Esto es en realidad lo que sucede cuando git realiza una combinación. Es posible que accidentalmente hayas comenzado una fusión al tirar de una rama y luego no hayas limpiado los resultados de la fusión. Ver [esto] (http://git-scm.com/docs/git-merge) (baje hasta "Cómo se presentan los conflictos"). –

9

Esto fue horrible; ningún error de javascript en mi computadora local significa que hay un problema con la compilación de activos.

Así es como lo resolví.

Como se sugirió en los comentarios para una pregunta similar ExecJS::ProgramError: Unexpected token punc «(», expected punc «:» when running rake assets:precompile on production, eliminé uglifier (en production.rb, comenté la línea del compresor) y la compresión por completo. (Lo había probado con otros compresores; yui no me dio mucha información. El cierre pareció darme una pista, pero no ayudó mucho)

Compruebé los activos localmente y luego pasé a producción. (Para comprimir localmente, use RAILS_ENV=production rake assets:precompile)

Corrí en el servidor y aquí es cuando surgieron los errores de javascript. Básicamente era una fusión errónea de archivos (principalmente debido a algo comentado). Me deshice de esas líneas y volví a la producción. Todo tuvo éxito.

Volví a utilizar uglifier, eliminé los activos precompilados en public/assets/ y volví a la producción.

Espero que esto ayude a alguien!

11

En mi caso, estaba usando la sintaxis de es6 ()=>{...} en el archivo js. Reemplazarlo con function(){...} solucionó el problema.

+2

Este fue el problema para mí. Parece que Uglifier se ahoga en la sintaxis de ES6. – ACIDSTEALTH

+0

Tuve un problema similar, utilicé un valor predeterminado 'función (opciones = {})', parece que he estado codificando demasiado tiempo en ES6;) –

+0

Este era exactamente mi caso y todavía quería usar la sintaxis de ES6. Terminé usando 'react_on_rails' (no para React, solo para usar Webpack para seguir disfrutando de ES2015 +) – artificis

1

Verifique que los nuevos archivos JS que agregó en su aplicación incluyen complementos y otros agregados por Bower o algo similar.

Intente agregar uno por uno para encontrar qué archivo tiene problema. En mi caso estaba en anchor-scroll.js. Cuando cambié para usar anchor-scroll.min, el rake se ejecuta correctamente.

cambiar esta situación:

//= require anchor-scroll/scroll 

Por:

//= require anchor-scroll/scroll.min 
118

Una forma más universal para encontrar el problema en js-activos: Run rails console y:

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 
+1

nice. buena solución –

+4

'JS_PATH = 'app/assets/javascripts/**/*. js'' 'Dir [JS_PATH] .echo do | archivo |' 'comenzar ' ' Uglifier.compile (File.read (archivo)) '' rescue' '' pone file' end' fácil de leer si usted tiene un montón de archivos js –

+10

esto ahorró mi día –

1

Mi problema fue con dos llamadas de éxito.

En primer lugar se MQTT onSuccess:

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

que solucionar con:

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

y el segundo fue el éxito del Ajax. Linter le mostrará

Error: Expected method shorthand

pero todo funcionará correctamente.

2

Por alguna razón, en heroku y también cuando ejecuté el código mencionado anteriormente para "uglificar" el javascript en la consola de rieles, ¡no informaba el número de línea del error !. Es solo un contenedor de ruby ​​para UglifyJS, que puede usar en línea aquí https://skalman.github.io/UglifyJS-online/.

Así que acabo de copiar y pegar el archivo ofensor js aquí, e informó el número de línea. Muy fácil.

Cuestiones relacionadas