Beim Laden des Edelsteins 'uglifier' ist ein Fehler aufgetreten. (Bundler :: GemRequireError)

119

Warum erhalte ich diesen Fehler?

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>
shibly
quelle
Haben Sie dieses Problem gelöst? Ich habe genau das gleiche Problem. Ich verwende Ruby 2.2.4 mit Rails 4.2.5 auf Ubuntu.
Nur ein Lernender
2
versuchen Sie sudo apt-get install nodejs
user3754535

Antworten:

252

Sie sollten den folgenden Befehl ausführen, um NodeJS in Ubuntu zu installieren

sudo apt-get install nodejs

oder führen Sie dies für OSX aus

brew install nodejs

Uglifier ist ein JS-Wrapper und benötigt eine JS-Laufzeit oder einen JS-Interpreter. Ich würde NodeJS installieren.

Marcos Serpa
quelle
4
warum braucht es js env?
DragonKnight
1
Es funktioniert :) Danke, aber warum müssen diese NodeJS installiert werden?
Alankar Mehr
1
Wir brauchen eine JS Runtime, @AlankarMore;). Also, NodeJS, dies ist normalerweise meine Wahl, hauptsächlich weil es auf der V8-Engine von Chrome basiert ( developer.google.com/v8 ). Wir haben heute viel JS bei Rails. Und wir brauchen eine Umgebung, in der all diese Dinge ausgeführt werden können. Das schließt Wrapper, Laufzeiten / Dolmetscher ein ...
Marcos Serpa
1
Wenn Sie nodejs von der Quelle installieren, stellen Sie sicher, dass die Binärdatei dort installiert ist, /usr/bin/nodejswo execjs sie voraussichtlich findet.
Rok Strniša
1
@AboozarRajabi Nodejs ist nicht unbedingt erforderlich, eine JS-Laufzeit oder ein Interpreter jedoch. Und dies ist in unserem Fall die Rolle von NodeJS. Wenn nicht NodeJS, benötigen Sie eine andere JS-Laufzeit / einen anderen JS-Interpreter.
Marcos Serpa
36

In der Standard-Rails-Gem-Datei ist die Zeile für den Gem 'therubyracer' auskommentiert. Wenn Sie es auskommentieren, erhalten Sie dieses Juwel und es sollte funktionieren.

Aus " Erste Schritte mit Schienen ":

Für die Kompilierung der Komprimierung von CoffeeScript- und JavaScript-Assets ist eine JavaScript-Laufzeit auf Ihrem System verfügbar. Wenn keine Laufzeit vorhanden ist, wird execjsbeim Kompilieren der Assets ein Fehler angezeigt. In Mac OS X und Windows wird normalerweise eine JavaScript-Laufzeit installiert. Rails fügt das therubyracerJuwel Gemfilein einer kommentierten Zeile für neue Apps hinzu und Sie können Kommentare abgeben, wenn Sie sie benötigen. therubyrhinoist die empfohlene Laufzeit für JRuby-Benutzer und wird standardmäßig zu den Gemfileunter JRuby generierten In-Apps hinzugefügt . Sie können alle unterstützten Laufzeiten bei ExecJS untersuchen .

user3780968
quelle
2
Vielen Dank! Dies war einfacher und scheint sauberer zu sein, als sich auf NodeJS zu verlassen.
ConnorWGarvey
Während diese Antwort funktioniert, entgeht es, dass Sie lieber (für die Produktion) eine ordnungsgemäße Execjs-Laufzeit wie node.js haben sollten
Cyril Duchon-Doris
0

Beim Erstellen der Datenbank ist ein Fehler aufgetreten.

Das Problem ist, dass die Node.js versucht haben, ohne sudoim Skript zu installieren :

sudo apt-get install nodejs
gleb glazkov
quelle