Ocorreu um erro ao tentar carregar o 'uglifier' da gema. (Bundler :: GemRequireError)

119

Por que estou recebendo este erro?

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>
evitativamente
fonte
Você resolveu este problema? Eu tenho exatamente o mesmo problema. Estou executando o Ruby 2.2.4 com Rails 4.2.5 no Ubuntu.
Apenas um aluno
2
tente sudo apt-get install nodejs
user3754535

Respostas:

252

Você deve executar o seguinte comando para instalar o NodeJS no Ubuntu

sudo apt-get install nodejs

ou execute isso para OSX

brew install nodejs

Uglifier é um wrapper JS e precisa de um runtime JS em execução ou interpretador JS. Eu escolheria instalar o NodeJS.

Marcos Serpa
fonte
4
por que precisa de js env?
DragonKnight
1
Funciona :) Obrigado, mas por que precisamos que este nodejs seja instalado?
Alankar More
1
Precisamos de um JS Runtime, @AlankarMore;). Então, NodeJS geralmente é minha escolha, principalmente porque é construído no motor V8 do Chrome ( developers.google.com/v8 ). Temos muito JS hoje em Rails. E precisamos de um ambiente configurado para executar todas essas coisas. Isso inclui wrappers, tempos de execução / intérpretes ...
Marcos Serpa
1
Se estiver instalando nodejs da fonte, certifique-se de que o binário esteja instalado /usr/bin/nodejsonde o execjs espera encontrá-lo.
Rok Strniša
1
@AboozarRajabi Nodejs não é essencial, mas um tempo de execução ou interpretador JS é. E esse é o papel do NodeJS aqui, para o nosso caso. Se não for NodeJS, você precisará de outro runtime / interpretador JS.
Marcos Serpa
36

No Rails Gemfile padrão, a linha para a gema 'therubyracer' está comentada. Se você descomentar, você obterá aquela joia e deve funcionar.

Em " Getting Started with Rails ":

Compilar CoffeeScript e compactação de ativos JavaScript requer que você tenha um tempo de execução JavaScript disponível em seu sistema; na ausência de um tempo de execução, você verá um execjserro durante a compilação de ativos. Normalmente, o Mac OS X e o Windows vêm com um tempo de execução JavaScript instalado. O Rails adiciona a therubyracergema ao gerado Gemfileem uma linha comentada para novos aplicativos e você pode descomentar se precisar. therubyrhinoé o tempo de execução recomendado para usuários JRuby e é adicionado por padrão aos Gemfileaplicativos gerados no JRuby. Você pode investigar todos os tempos de execução suportados em ExecJS .

user3780968
fonte
2
Obrigado! Isso foi mais fácil e parece mais limpo do que confiar no NodeJS.
ConnorWGarvey
Embora essa resposta funcione, parece que você deveria ter (para produção) um runtime de execjs adequado como node.js
Cyril Duchon-Doris
0

Ocorreu um erro ao criar o banco de dados.

O problema é que o Node.js tentou instalar sem sudono script:

sudo apt-get install nodejs
gleb glazkov
fonte