Hubo un error al intentar cargar la gema 'uglifier'. (Bundler :: GemRequireError)

119

¿Por qué recibo este error?

shibly@mybox:~/blog$ rails server
/home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:80:in `rescue in block (2 levels) in require': There was an error while trying to load the gem 'uglifier'. (Bundler::GemRequireError)
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:76:in `block (2 levels) in require'
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:72:in `each'
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:72:in `block in require'
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:61:in `each'
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler/runtime.rb:61:in `require'
    from /home/shibly/.gem/ruby/2.2.4/gems/bundler-1.11.2/lib/bundler.rb:99:in `require'
    from /home/shibly/blog/config/application.rb:7:in `<top (required)>'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:78:in `require'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:78:in `block in server'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:75:in `tap'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:75:in `server'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
    from /home/shibly/.gem/ruby/2.2.4/gems/railties-4.2.5/lib/rails/commands.rb:17:in `<top (required)>'
    from bin/rails:9:in `require'
    from bin/rails:9:in `<main>
astutamente
fuente
¿Has resuelto este problema? Tengo exactamente el mismo problema. Estoy ejecutando ruby ​​2.2.4 con rieles 4.2.5 en ubuntu.
Solo un alumno
2
intente sudo apt-get install nodejs
user3754535

Respuestas:

252

Debe ejecutar el siguiente comando para instalar NodeJS en Ubuntu

sudo apt-get install nodejs

o ejecuta esto para OSX

brew install nodejs

Uglifier es un contenedor JS y necesita un tiempo de ejecución JS en ejecución o un intérprete JS. Elegiría instalar NodeJS.

Marcos Serpa
fuente
4
¿Por qué necesita js env?
DragonKnight
1
Funciona :) Gracias, pero ¿por qué necesitamos instalar este nodejs?
Alankar More
1
Necesitamos un JS Runtime, @AlankarMore;). Entonces, NodeJS, esta suele ser mi elección, principalmente porque está construido sobre el motor V8 de Chrome ( developers.google.com/v8 ). Tenemos mucho JS hoy en Rails. Y necesitamos un entorno configurado para ejecutar todas esas cosas. Eso incluye envoltorios, tiempos de ejecución / intérpretes ...
Marcos Serpa
1
Si instala nodejs desde la fuente, asegúrese de que el binario esté instalado /usr/bin/nodejsdonde execjs espera encontrarlo.
Rok Strniša
1
@AboozarRajabi Nodejs no es esencial, pero un intérprete o tiempo de ejecución de JS sí lo es. Y este es el papel de NodeJS aquí, en nuestro caso. Si no es NodeJS, necesitará otro intérprete / tiempo de ejecución JS.
Marcos Serpa
36

En el Gemfile predeterminado de Rails, la línea de la gema 'therubyracer' está comentada. Si lo descomentas, obtendrás esa gema y debería funcionar.

De " Introducción a Rails ":

La compilación de la compresión de activos de CoffeeScript y JavaScript requiere que tenga un tiempo de ejecución de JavaScript disponible en su sistema; en ausencia de un tiempo de ejecución, verá un execjserror durante la compilación de activos. Por lo general, Mac OS X y Windows vienen con un tiempo de ejecución de JavaScript instalado. Rails agrega la therubyracergema a la generada Gemfileen una línea comentada para nuevas aplicaciones y puede descomentar si lo necesita. therubyrhinoes el tiempo de ejecución recomendado para los usuarios de JRuby y se agrega de forma predeterminada a las Gemfileaplicaciones generadas en JRuby. Puede investigar todos los tiempos de ejecución admitidos en ExecJS .

usuario3780968
fuente
2
¡Gracias! Esto fue más fácil y parece más limpio que confiar en NodeJS.
ConnorWGarvey
Si bien esta respuesta funciona, elude que debería tener (para la producción) un tiempo de ejecución de execjs adecuado como node.js
Cyril Duchon-Doris
0

Hubo un error al crear el archivo db.

El problema es que Node.js intentó instalar sin sudoen el script:

sudo apt-get install nodejs
gleb glazkov
fuente