Une erreur s'est produite lors de la tentative de chargement du gem 'uglifier'. (Bundler :: GemRequireError)

119

Pourquoi ai-je cette erreur?

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>
modérément
la source
Avez-vous résolu ce problème? J'ai exactement le même problème. J'utilise ruby ​​2.2.4 avec les rails 4.2.5 sur ubuntu.
Juste un apprenant
2
essayez sudo apt-get install nodejs
user3754535

Réponses:

252

Vous devez exécuter la commande suivante pour installer NodeJS dans Ubuntu

sudo apt-get install nodejs

ou exécutez ceci pour OSX

brew install nodejs

Uglifier est un wrapper JS et il a besoin d'un runtime JS en cours d'exécution ou d'un interpréteur JS. Je choisirais d'installer NodeJS.

Marcos Serpa
la source
4
pourquoi il a besoin de js env?
DragonKnight
1
Cela fonctionne :) Merci, mais pourquoi avons-nous besoin que ce nodejs soit installé?
Alankar More
1
Nous avons besoin d'un JS Runtime, @AlankarMore;). Donc, NodeJS c'est généralement mon choix, principalement parce qu'il est construit sur le moteur V8 de Chrome ( développeurs.google.com/ v8 ). Nous avons beaucoup de JS aujourd'hui chez Rails. Et nous avons besoin d'un environnement pour exécuter tout cela. Cela inclut les wrappers, les runtimes / interprètes ...
Marcos Serpa
1
Si vous installez nodejs depuis la source, assurez-vous que le binaire est installé /usr/bin/nodejslà où execjs s'attend à le trouver.
Rok Strniša
1
@AboozarRajabi Nodejs n'est pas un élément essentiel, mais un runtime ou un interpréteur JS l'est. Et c'est le rôle de NodeJS ici, dans notre cas. Sinon NodeJS, vous aurez besoin d'un autre runtime / interpréteur JS.
Marcos Serpa
36

Dans le fichier Rails Gemfile par défaut, la ligne du gem 'therubyracer' est commentée. Si vous le décommentez, vous obtiendrez ce joyau et cela devrait fonctionner.

Depuis « Premiers pas avec les rails »:

La execjscompilation de la compression d'actifs CoffeeScript et JavaScript nécessite que vous disposiez d'un runtime JavaScript sur votre système, en l'absence d'un runtime, vous verrez une erreur lors de la compilation d'actifs. Généralement, Mac OS X et Windows sont livrés avec un runtime JavaScript installé. Rails ajoute le therubyracerjoyau au généré Gemfiledans une ligne commentée pour les nouvelles applications et vous pouvez décommenter si vous en avez besoin. therubyrhinoest le runtime recommandé pour les utilisateurs de JRuby et est ajouté par défaut aux Gemfileapplications in générées sous JRuby. Vous pouvez étudier tous les environnements d' exécution pris en charge sur ExecJS .

utilisateur3780968
la source
2
Merci! C'était plus facile et semble plus propre que de compter sur NodeJS.
ConnorWGarvey
Bien que cette réponse fonctionne, il échappe que vous devriez plutôt avoir (pour la production) un runtime execjs approprié comme node.js
Cyril Duchon-Doris
0

Une erreur s'est produite lors de la création de la base de données.

Le problème est que Node.js a essayé de s'installer sans sudodans le script:

sudo apt-get install nodejs
gleb glazkov
la source