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>

¿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.


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 .


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.