web-dev-qa-db-fra.com

execJs: "Impossible de trouver un runtime JavaScript" mais execjs ET therubyracer sont dans Gemfile

Je reçois cette erreur:

rake avorté! Impossible de trouver un runtime JavaScript. Voir https://github.com/sstephenson/execjs ,

J'ai déjà passé plus d'heures à chercher sur Google que je suis prêt à admettre. Je crois que c'est un bug de l'exécutif.

De tous les articles, il s'agit d'un problème très courant avec Rails 3.1. Un runtime js est maintenant nécessaire pour ce qui est maintenant des gemmes standard comme coffee-script et sass.

La plupart de ces cas ont été résolus en ajoutant les gemmes "execjs" et "therubyracer" à l'application Gemfile, puis en exécutant "bundle update" et/ou "bundle install". Mais pas pour moi.

Je suppose que j'ai eu de la chance. J'utilise Rails 3.1.3/Ruby 1.9 sur une ancienne version de Redhat Linux 4 (2.6.9-101.ELsmp) et gcc est 3.4.6.

Les autres corrections signalées ne m'aident pas, je ne parviens pas à installer 'nodejs', 'johnson' ou 'mustang', les autres exécutables que execJs est supposé localiser et utiliser. Ils ne feront pas/installer sur mon système.

Je dois résoudre le problème qui fait que execJs ne parvient pas à localiser "therubyracer". Voici le Gemfile (et l'installation en bundle dit Ok):

source 'http://rubygems.org'

gem 'Rails', '3.1.3'
gem 'sqlite3'
gem 'sho-mongrel'

gem 'execjs'
gem 'therubyracer'
#gem "therubyracer", :require => 'v8'

group :assets do
  gem 'sass-Rails',   '~> 3.1.5'
  gem 'coffee-Rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
end

Et voici une trace:

~/Rails/316-private-pub/chatter-after>rake db:create --trace
rake aborted!
Could not find a JavaScript runtime. See https://github.com/sstephenson/execjs for a list of available runtimes.
/usr/local/lib/Ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs/runtimes.rb:50:in `autodetect'
/usr/local/lib/Ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:5:in `<module:ExecJS>'
/usr/local/lib/Ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs.rb:4:in `<top (required)>'
/usr/local/lib/Ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
/usr/local/lib/Ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
/usr/local/lib/Ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
/usr/local/lib/Ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
/usr/local/lib/Ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
/usr/local/lib/Ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
/usr/local/lib/Ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
/home/vitalarthur/Rails/316-private-pub/chatter-after/config/application.rb:7:in `<top (required)>'
/usr/local/lib/Ruby/site_Ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/local/lib/Ruby/site_Ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/home/vitalarthur/Rails/316-private-pub/chatter-after/Rakefile:5:in `<top (required)>'
/usr/local/lib/Ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load'
/usr/local/lib/Ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/usr/local/lib/Ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:501:in `raw_load_rakefile'
/usr/local/lib/Ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:82:in `block in load_rakefile'
/usr/local/lib/Ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/Ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:81:in `load_rakefile'
/usr/local/lib/Ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:65:in `block in run'
/usr/local/lib/Ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:133:in `standard_exception_handling'
/usr/local/lib/Ruby/gems/1.9.1/gems/rake-0.9.2.2/lib/rake/application.rb:63:in `run'
/usr/local/lib/Ruby/gems/1.9.1/gems/rake-0.9.2.2/bin/rake:33:in `<top (required)>'
/usr/local/bin/rake:19:in `load'
/usr/local/bin/rake:19:in `<main>'

Il n'y a rien d'intéressant dans le journal de développement.

Voici le dir execjs:

/usr/local/lib/Ruby/gems/1.9.1/gems/execjs-1.3.0/lib/execjs>ls
disabled_runtime.rb  module.rb              Ruby_rhino_runtime.rb  version.rb
external_runtime.rb  mustang_runtime.rb     runtimes.rb
johnson_runtime.rb   Ruby_racer_runtime.rb  

J'ai aussi essayé execjs-1.2.13. Même problème.

Si je commente execjs.rb ci-dessous, je peux exécuter rake sans l'erreur:

require "execjs/module"
require "execjs/runtimes"

module ExecJS
  self.runtime #||= Runtimes.autodetect
end

Mais alors je n'ai pas de runtime.

Je peux voir d'où provient le texte d'erreur dans runtimes.rb:

def self.autodetect
  from_environment || best_available ||
    raise(RuntimeUnavailable, "Could not find a JavaScript runtime. " +
      "See https://github.com/sstephenson/execjs for a list of available runtimes.")
end

La question est donc, puisque j'ai "therubyracer" installé, pourquoi runtimes.rb ne le trouve-t-il pas? Est-ce que execJs est cassé?

Ici c'est le 'therubyracer':

/usr/local/lib/Ruby/gems/1.9.1/gems/therubyracer-0.9.9

Comment puis-je réparer cela?

187
steve98177

Utilisateurs Ubuntu:

J'ai eu le même problème et je l'ai corrigé en installant nodejs sur mon système, indépendamment de la gemme.

sur Ubuntu son: Sudo apt-get install nodejs

J'utilise 64bit ubuntu 11.10

update: D'après la réponse de @Galina ci-dessous, je suppose que la dernière version de nodejs est nécessaire. Par conséquent, @ steve98177, votre meilleure option sur une boîte RedHat (ou CentOS) consiste à installer à partir du code source, comme @Galina. vous ne pouvez pas "créer/installer" sur cette boîte?, je vous suggère d'essayer d'installer un rpm Fedora (longue vue) https://github.com/joyent/node/wiki/Installing-Node.js- via-package-manager ou trouvez une autre boîte RH/CentOs (que vous pouvez "activer") et créez votre propre RPM et installez-la sur la boîte RH d'origine (si l'ancienne glibc sur RH joue à Nice).

Le vrai problème ici (IMHO) est d’installer Gems qui ont des dépendances sur les paquets installés en dehors de l’environnement Ruby, y at-il un moyen de savoir avant d’installer? un RFI pour Gems ou bundler?


Utilisateurs CentOS/RedHat:

Sudo yum install nodejs
343
Paul Williams

Dans votre gemfile, ajoutez:

gem 'execjs'
gem 'therubyracer', :platforms => :Ruby

Pour plus de détails: ExecJS et impossible de trouver un moteur d'exécution JavaScript

105
Tiago

Voici le lien dont j'avais besoin pour résoudre le problème (installer nodejs): https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

15
Abram

Lorsque vous créez un projet vide, cette ligne est commentée dans Gemfile. Décomment juste et empaquetez!

gem 'therubyracer', :platforms => :Ruby
12
Santhosh

J'ai eu des problèmes similaires sur Ubuntu 12.04. Installation de Node.js résolu le problème.

5
Ramiz Raja

J'utilise Ubuntu 11.10- 32 bits avec Ruby 1.9.3p194, Rails 3.2.3, Gem 1.8.24. A reçu la même erreur Javascript lors de l'exécution de "console script/Rails".

Cependant, faire un "Sudo apt-get install nodejs" a résolu mon problème.

4
Vibin B. Nair

Essayez d’installer NodeJS et essayez à nouveau.

https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

4
Kent Aguilar

Les utilisateurs de Fedora NE SERONT PAS en mesure de faire un simple "yum install nodejs" en raison de graves conflits de dénomination et de placement de fichier qui empêchent ce paquet d'être même disponible via les référentiels Fedora.

Il y a apparemment au moins un autre référentiel disponible avec une version alternative qui peut fonctionner, mais il s'agit de deux "substituts" de trop pour que je veuille bien l'utiliser - je cherche une autre alternative.

4
Matt Heck

J'ai eu le même problème sur un serveur de transfert. L'exécution de tâches rake sur mon ordinateur de développement local ne m'a posé aucun problème, mais le déploiement du message d'erreur sur le serveur de transfert a échoué avec le message d'erreur "Impossible de trouver un moteur d'exécution JavaScript" lors de la tentative d'exécution de l'élément actifs: précompiler tâche de rake.

Bien sûr, therubyracer et execjs étaient dans mon Gemfile et j'utilisais les dernières versions. Mes fichiers Gemfile.lock correspondaient et j'ai ensuite vérifié les versions en exécutant bundle show.

Après une recherche sur Google, je me suis retrouvé supprimer toutes mes pierres précieuses et les réinstaller qui a résolu le problème. Je ne sais toujours pas quelle était la cause première du problème, mais peut-être que cela vous aidera.

Voici à quoi ressemble mon environnement, BTW:

Ubuntu 10.04.3 LTS
rbenv
Ruby 1.9.2-p290
bundler-1.0.21
execjs-1.3.0
therubyracer-0.9.9
3
TheSpend

J'ai eu le même problème. Ajouter les gemmes 'execjs' et 'therubyracer' ne fonctionne pas pour moi. apt-get install nodejs - ne fonctionne pas non plus. J'utilise 64bit ubuntu 10.04.

Mais cela m'a aidé à: 1. J'ai créé un dossier vide (par exemple, "Java"). 2. À partir du terminal dans le dossier que j'ai créé, je fais:

$ git clone git://github.com/ry/node.git
$ cd node
$ ./configure
$ make
$ Sudo make install

Après cela, je lance "l'installation en bundle" comme d'habitude (depuis un dossier avec le projet Ruby & Rails). Et le problème a été résolu. Ruby n'a pas eu à réinstaller.

3
Galina

Si vous étiez sur ubuntu $ Sudo apt-get install nodejs

Essayez de ne pas utiliser d'autres systèmes comme Windows pour le développement. Pensez que presque tous les serveurs du monde sont des serveurs Linux. Par conséquent, lorsque vous essayez de déployer cette application, cela sera plus facile si vous l’avez également développée sur un environnement Linux ou Unix.

3

J'ai tiré mes cheveux avec cette erreur à quelques reprises. J'ai réussi à le faire disparaître de temps en temps en redémarrant Apache/Nginx.

Je l'ai donc corrigé de la même manière que ci-dessus, en ajoutant ce qui suit dans le fichier GEM:

gem 'execjs'
gem 'therubyracer', :platforms => :Ruby

et puis j'ai supprimé mon fichier gemfile.lock, puis j'ai répété "bundle install". J'ai seulement constaté qu'alors "bundle install" installait les bonnes bibliothèques, etc.

2
LorneCurrie

Cela m’arrivait sur ma machine Windows, le problème était bien différent. J'avais accidentellement supprimé des chemins de ma variable %PATH%. Redémarrer simplement l'invite de commande l'a résolu. Il semble qu'il y ait eu un runtime JS dans l'un de ces chemins manquants.

2
Godwin

quand je génère Rails g contrôleur j'ai la même erreur. Après cela, lorsque les modifications suivantes ont été apportées à Gemfile (dans Rails 4), tout s’est déroulé sans heurts.

gem 'execjs'
pierre précieuse 'therubyracer', "0.11.4"
Après cela, je peux pouvoir exécuter le serveur et pouvoir effectuer toutes les opérations de base sur l'application.

1
Madhan Ayyasamy

Sur Ubuntu, je devais Sudo apt-get update et ensuite l'installation de nodejs a fonctionné.

1
kilombo1

Dans mon cas, exécuter la commande bundle a fait l'affaire. J'espère qu'ils se trouvent alors.

0
javabeangrinder

J'ai eu ce problème lors de l'utilisation de RubyMine (6.3.3). Un jour, j'ai essayé d'exécuter mon code, mais cela n'a pas fonctionné et je me suis plaint de l'absence d'exécution de JavaScript. J'ai cependant pu utiliser Rails s. Le correctif pour moi était de créer une nouvelle configuration Run. Cela semble vraiment bizarre que la configuration de Run soit corrompue.

0
Jack

ajoutez votre fichier gem qui se trouve dans le dossier que vous avez créé: gem 'execjs' gem 'therubyracer'

0
Vishnu Harish