ExecJS et n'a pas pu trouver un runtime JavaScript

403

J'essaie d'utiliser le modèle Mongoid / Devise Rails 3.1 ( Mongoid et Devise ), et je reçois toujours une erreur indiquant qu'ExecJS ne peut pas trouver un runtime JavaScript. Assez juste quand je n'en ai pas installé, mais j'ai essayé d'installer Node.js , Mustang et Ruby Racer , mais rien ne fonctionne.

Je n'ai pas pu trouver un runtime JavaScript. Voir sstephenson / ExecJS (GitHub) pour une liste des runtimes disponibles ( ExecJS::RuntimeUnavailable).

Que dois-je faire pour que cela fonctionne?

srboisvert
la source
4
btw - J'utilise ubuntu karmic.
srboisvert
Vous devriez vraiment envisager de changer la réponse. La réponse Node.js n'est pas aussi bonne que l'execjs / rubyracer.
Sean Dunford
3
Le rubyracer a d'autres problèmes avec lui. Heroku ne recommande plus de l'inclure dans votre Gemfile si vous pouvez l'éviter. devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer Je pense que l'installation d'un bon runtime Javascript sur Ubuntu est la bonne réponse à cette question.
M. Scott Ford

Réponses:

436

Utilisateurs d'Ubuntu

Je suis sur Ubuntu 11.04 et j'ai eu des problèmes similaires. L'installation de Node.js l'a corrigé.

Depuis Ubuntu 13.04 x64, il vous suffit d'exécuter:

sudo apt-get install nodejs

Cela résoudra le problème.


Utilisateurs CentOS / RedHat

sudo yum install nodejs
eldewall
la source
1
Essayé. pas de chance. Je me demande si c'est un conflit RVM ou quelque chose. Tout ce que les autres ont suggéré n'a pas fonctionné pour moi.
srboisvert
76
gem 'execjs' gem 'therubyracer' c'est une meilleure solution que celle-ci.
dwaynemac
26
Heroku décourage désormais fortement le therubyracer en raison de l'utilisation de la mémoire. J'ai installé nodejs sur ma machine de développement selon cette réponse et j'ai retiré le therubyracer de mon gemfile. Voir aussi stackoverflow.com/questions/7092107/… .
Mark Berry
11
@dwaynemac Je ne suis pas d'accord. Je préfère que le runtime existe en tant que bibliothèque de système d'exploitation (comme avec Mac et Windows par défaut), plutôt que d'ajouter encore un autre joyau à la liste des dépendances.
William Denniss
1
Il semble que therubyracer et execjs causent des problèmes avec le déploiement de heroku, à moins qu'il y ait quelque chose d'autre qui a été modifié que j'ai manqué. C'est la solution préférée.
Sturm
445

Ajoutez simplement ExecJS et Ruby Racer dans votre fichier gem et exécutez bundle installaprès.

gem 'execjs'

gem 'therubyracer'

Tout devrait bien se passer après.

vincent jacquel
la source
6
Cela a fonctionné pour moi, rails 3.1rc4 et Ubuntu 11.04 (mon premier essai avec rails 3.1). J'essayais de générer un échafaudage quand j'ai eu l'erreur. Encore assez boiteux que le rail 3.1 est "cassé" hors de la boîte.
wonderfulthunk
35
Pour Rails 3.1 RC 6, il vous suffit de spécifiergem 'therubyracer'
Amree
5
Existe-t-il de toute façon que ces gemmes soient incluses dans le Gemfile par défaut lorsqu'une nouvelle application est créée?
Richard Fawcett,
2
c'est une meilleure solution que d'installer node.js. Si vous déployez sur un serveur distant ou partagez l'application avec d'autres développeurs, demander à tout le monde d'installer node.js est beaucoup plus difficile que d'exécuter simplement l'installation de bundle, ce qu'ils feraient de toute façon.
jdkealy
19
Heroku décourage désormais fortement le therubyracer en raison de l'utilisation de la mémoire. J'ai installé nodejs sur ma machine de développement ( github.com/joyent/node/wiki/… ) et retiré therubyracer de mon gemfile. Voir aussi stackoverflow.com/questions/7092107/… .
Mark Berry
77

Dans votre fichier Gem, écrivez

gem 'execjs'
gem 'therubyracer'

puis exécutez

bundle install

Tout fonctionne bien pour moi :)

manish nautiyal
la source
9
Vous n'avez pas besoin d'ajouter 'execjs'
miguelSantirso
Oui, juste dans les rails 3.2.1, vous devez utiliser uniquement gem'therubyracer '
manish nautiyal
Merci @manish nautiyal et @ Peter Mortensen. ça marche pour moi
Ravindra
48

J'ai eu un problème similaire: mon application Rails 3.1 a bien fonctionné sur Windows mais a obtenu la même erreur que l'OP lors de l'exécution sous Linux. Le correctif qui a fonctionné pour moi sur les deux plates-formes consistait à ajouter ce qui suit à mon Gemfile:

gem 'therubyracer', :platforms => :ruby

L'astuce est de savoir que cela :platforms => :rubysignifie en fait uniquement utiliser ce joyau avec "C Ruby (MRI) ou Rubinius, mais PAS Windows."

D'autres valeurs possibles pour :platformssont décrites dans la bundlerpage de manuel .

FYI: Windows a un moteur JavaScript intégré qui execjspeut localiser. Sous Linux, il n'y a pas de fonction intégrée bien qu'il y en ait plusieurs disponibles que l'on peut installer. therubyracerest l'un d'eux. D'autres sont répertoriés dans le execjs fichier README.md .

jwfearn
la source
Merci, celui-ci l'a corrigé pour moi sur Ubuntu Oneiric en utilisant l'installation rvm de ruby ​​1.9.3 et Rails 3.2.1
Yashima
Merci beaucoup monsieur!
DaTroop
J'ai rencontré l'erreur sur un serveur CentOS avec node.js installé. Cela m'a dépassé. Merci!
ncherro
36

L'ajout de la gemme suivante à mon Gemfile a résolu le problème:

gem 'therubyracer'

Regroupez ensuite vos nouvelles dépendances:

$ bundle install
JDutil
la source
ajoutez également des gemmes «execjs» dans Gemfile
Bijendra
6
execjs est déjà inclus par rails maintenant. Il n'était également requis que lors de la libération des candidats.
JDutil
16

Une autre façon consiste à simplement regrouper sans le groupe de gemmes qui contient les choses que vous n'avez pas.

Alors faites:

bundle install --without assets

vous n'avez pas du tout à modifier le Gemfile, à condition bien sûr que vous ne fassiez pas de choses sur la chaîne d'actifs - ce qui s'applique généralement dans des environnements autres que de développement. Bundle se souviendra de votre paramètre «--without» dans le fichier .bundle / config.

moschops
la source
Meilleure réponse. A travaillé pour les rails version 3.2.3
Frantzdy Romain
1
C'est génial, et une solution si simple. Le site Heroku dit que RubyRacer n'est plus requis (avec la pile de cèdre), donc j'étais perplexe sur la raison pour laquelle mon programme ne fonctionnait pas localement. Cela a fait l'affaire.
Mike Blyth
6

Ajoutez les gemmes suivantes dans votre fichier de gemmes

gem 'therubyracer'
gem 'execjs'

et courir

bundle install

vous avez terminé :)

Ramiz Raja
la source
6

Pour amazon linux (AMI):

sudo yum install nodejs npm --enablerepo=epel
William Hu
la source
1
Merci, cela devrait être à un niveau supérieur
David Mauricio
cela était essentiel pour faire fonctionner un déploiement capistrano sur une distribution linux standard AWS.
jjk
4

J'avais l'habitude d'ajouter le Ruby Racer au fichier Gem pour le réparer. Mais bon, Node.js fonctionne!

Richard Zhang
la source
comment ajoutez-vous nodejs au gemfile? Je n'ai pas trouvé de joyau nodejs.
Papouche Guinslyzinho
4

J'ai eu cette même erreur mais uniquement sur mon serveur de transfert et non sur mon environnement de production. nodejs était déjà installé sur les deux environnements.

En tappant:

which node

J'ai découvert que la commande node était située dans: / usr / bin / node en production mais: / usr / local / bin / node en staging.

Après avoir créé un lien symbolique sur la mise en scène, c'est-à-dire:

sudo ln -s /usr/local/bin/node /usr/bin/node

l'application a ensuite travaillé en mise en scène.

Pas de bruit, pas de bruit.

Sean
la source
fonctionne comme du charme! Un conseil: je avais besoin pour faire un lien symbolique nodejsaussi
Rafael Gomes Francisco
3

N'utilisez pas RubyRacer car il est mauvais en mémoire. Installer Node.js comme suggéré par certaines personnes ici est une meilleure idée.

Cette liste des temps d'exécution disponibles pouvant être utilisés par la bibliothèque ExecJs documente également l'utilisation de Node.js

https://github.com/sstephenson/execjs

Donc, Node.js n'est pas une solution excessive et une bien meilleure solution que d'utiliser RubyRacer.

Nerf
la source
0

J'ai commencé à avoir ce problème lorsque j'ai commencé à utiliser rbenv avec Ruby 1.9.3 alors que mon système ruby ​​est 1.8.7. Le bijou est installé aux deux endroits, mais pour une raison quelconque, le script rails ne l'a pas récupéré. Mais l'ajout des "execjs" et "therubyracer" au Gemfile a fait l'affaire.

arangamani
la source
0

Dans votre fichier gem Décommentez cette ligne.

19 # gem 'therubyracer', plateformes:: rubis

Et exécutez l'installation de l'ensemble

Tu es prêt à travailler. :)

Sandeep Roniyaar
la source
0

Tentative de débogage dans RubyMine à l'aide d'Ubuntu 18.04, Ruby 2.6. *, Rails 5 et RubyMine 2019.1.1 , j'ai rencontré le même problème.

Pour résoudre le problème, j'ai décommenté la mini_racerligne de mon Gemfile, puis j'ai exécuté bundle:

# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'mini_racer', platforms: :ruby

Changer pour:

# See https://github.com/rails/execjs#readme for more supported runtimes
gem 'mini_racer', platforms: :ruby
CommandZ
la source
0

J'ai installé nodevia nvm et rencontré ce problème lors du déploiement avec Capistrano. Capistrano n'a pas chargé nvm automatiquement car il fonctionne de manière non interactive.

Pour corriger, déplacez simplement les lignes que nvm ajoute à votre ~/.bashrchaut. Le fichier ressemblera alors à ceci:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
Kevin Cooper
la source