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

191

J'obtiens cette erreur:

râteau 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 à l'admettre. Je crois que c'est un bogue execJs.

De tous les messages, il s'agit d'un problème très courant avec les 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 gems '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 les 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 correctifs rapportés n'aident pas, je ne peux pas installer 'nodejs', 'johnson' ou 'mustang', les autres runtimes execJs sont censés localiser et utiliser. Ils ne feront pas / n'installeront pas sur mon système.

Je dois résoudre le problème qui empêche les execJs de localiser «therubyracer». Voici le Gemfile (et l'installation du 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 répertoire 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 également 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ù vient 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 installé 'therubyracer', pourquoi ne peut pas runtimes.rb le trouver? Les execJs sont-ils cassés?

Ici, il 'therubyracer':

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

Comment puis-je réparer cela?

steve98177
la source

Réponses:

346

Utilisateurs Ubuntu:

J'ai eu le même problème et je l'ai résolu en l'installant nodejssur mon système indépendamment de la gemme.

sur ubuntu son: sudo apt-get install nodejs

J'utilise Ubuntu 11.10 64 bits

mise à jour: D'après la réponse de @Galina ci-dessous, je suppose que la dernière version de nodejs est requise, donc @ steve98177 votre meilleure option sur une boîte redhat (ou CentOS) est d'installer à partir du code source comme @Galina l'a fait, mais comme vous impossible de "faire / installer" sur cette boîte?, je vous suggère d'essayer d'installer un rpm fedora (long shot) https://github.com/joyent/node/wiki/Installing-Node.js-via-package- manager ou trouvez une autre boîte RH / CentOs (sur laquelle vous pouvez «créer») et créez votre propre rpm et installez-la sur la boîte RH d'origine (si l'ancienne glibc sur RH joue bien).

Le vrai problème ici (à mon humble avis) est l'installation de Gems qui ont des dépendances sur les packages installés en dehors de l'environnement ruby, y a-t-il un moyen de savoir avant d'installer? une RFI pour Gems ou bundler?


Utilisateurs CentOS / RedHat:

sudo yum install nodejs
Paul Williams
la source
1
sur ubuntu, je devais sudo apt-get update, puis l'installation de nodejs a fonctionné.
Vineet Bhatia
J'ai eu le même problème sur mon Ubuntu 12.04- 32 bits avec ruby ​​1.9.3p392, rails 3.2.3, gem 1.8.25. A reçu la même erreur lors de l'exécution de "script / rails console" et "script / rails server". sudo apt-get install nodejsrésolu mon problème.
ajin6747
Mais faut-il que ce soit Node? Je suis sûr que vous pouvez en utiliser d'autres comme therubyracer, therubyrhino ou Apple JavaScriptCore. Je sais qu'ExecJS les prend en charge. github.com/sstephenson/execjs
Dustin Griffith
Tenter d'installer gem l'un des autres environnements d'exécution supportés par execjs ne m'a mené nulle part. en effet, l'installation de nodejs a fonctionné. Loin d'être idéal, mais cela vous fait passer le poteau.
Mitch Kent
J'utilise ubuntu 14.04. Problème résolu après l'installation de nodejs.
Charles Wu
108

Dans votre gemfile, ajoutez:

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

Pour plus de détails: ExecJS et impossible de trouver un runtime JavaScript

Tiago
la source
1
Merci, mais cela ne fonctionne pas. Regardez cette tentative de faire reconnaître rubyrhino par execjs: gem which rhino /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
steve98177
A travaillé pour moi aussi, une note pour les rails débutants comme moi: le Gemfile est dans le dossier du projet.
McSas
1
Pour ceux d'entre vous pour qui cela n'a pas fonctionné: essayez d' gem install therubyracerabord de courir .
maksimov
Pour toute autre personne ayant ce problème, j'installais le projet fringant de Shopify sur un système CentOS 5.8 et rencontrais le problème d'exécution execjs. J'ai ajouté ceci à mon Gemfileet cela a fonctionné.
Casey
Ok ça marche, très bien. Mais pourquoi devons-nous faire cela? Chaque fois que j'ajoute une ligne à mon Gemfile, cela doit vraiment avoir un sens pour les projets personnels, et pour les projets d'équipe, c'est encore plus sale de le faire car cela affecte les machines des autres alors que le problème était spécifique à l'environnement. IMHO ce n'est pas une solution très décente à long terme.
Augustin Riedinger le
13

Lorsque vous créez un projet vide, cette ligne est commentée dans Gemfile. Décommentez-le et regroupez-le!

gem 'therubyracer', :platforms => :ruby
Santhosh
la source
2
... et groupez! C'est, de loin, la réponse la plus simple.
etusm
4

J'utilise Ubuntu 11.10- 32 bits avec ruby ​​1.9.3p194, rails 3.2.3, gem 1.8.24. Recevait la même erreur Javascript lors de l'exécution de "script / rails console".

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

Vibin B. Nair
la source
4

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

Il y a apparemment au moins un dépôt alternatif disponible avec une version alternative qui peut fonctionner, mais c'est deux "alternatives" de trop pour que je veuille l'utiliser - je cherche une autre alternative.

Matt Heck
la source
Cela a peut-être été vrai à l'époque, mais cela fonctionne bien maintenant (décembre 2015)
Mitch Kent
4

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 dans le monde sont des serveurs Linux, donc lorsque vous essayez de déployer cette application, ce sera plus facile si vous l'avez également développée sur un environnement Linux ou Unix.

Julian Arango López
la source
3

J'ai eu le même problème sur un serveur intermédiaire. Je n'ai eu aucun problème à exécuter des tâches de rake sur ma machine de développement locale, mais le déploiement sur le serveur intermédiaire a échoué avec le message d'erreur "Impossible de trouver un runtime JavaScript" lors de la tentative d'exécution des actifs: tâche de rake de précompilation .

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 vérifié les versions en exécutant bundle show .

Après avoir cherché sur Google, j'ai fini par supprimer toutes mes gemmes et les réinstaller, ce qui a résolu le problème. Je ne sais toujours pas quelle était la cause profonde, 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
TheSpend
la source
J'ai ce problème sur ubuntu 10.04. Je ne pensais pas qu'utiliser Ubuntu 12.04 en valait la peine, mais je suppose que c'est le cas! Donc, je pense que dans mon cas, le problème est que j'ai compilé et recompilé mon ruby ​​(1.9.3, 1.9.2) trop de fois. Je le recompile à nouveau pour voir si cela le résout. Oh et je mets à jour mon apt-get à la dernière.
Victor Pudeyev
3

J'ai eu le même problème. L'ajout des gemmes «execjs» et «therubyracer» ne fonctionne pas pour moi. apt-get install nodejs - ne fonctionne pas non plus. J'utilise Ubuntu 10.04 64 bits.

Mais cela m'a aidé: 1. J'ai créé un dossier vide (par exemple "java"). 2. Depuis le 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 "bundle install" comme d'habitude (à partir du dossier avec le projet ruby ​​& rails). Et le problème a été résolu. Ruby n'a pas eu à réinstaller.

Galina
la source
toute personne essayant ceci maintenant obtiendra une erreur. veuillez essayer de suivre git clone github.com/nodejs/node
Yeasin Ar Rahman
2

Cela m'est venu à l'esprit sur ma machine Windows, il s'avère que le problème était assez différent. J'avais accidentellement supprimé certains chemins de ma %PATH%variable. Le simple redémarrage de l'invite de commande l'a résolu. Il semble qu'il y avait un runtime JS dans l'un de ces chemins manquants.

Godwin
la source
J'ai aussi supprimé un chemin de ma machine Windows, pourriez-vous mentionner comment avez-vous ajouté le chemin js
Hussain Akhtar Wahid 'Ghouri'
@HussainAkhtarWahid, je n'ai pas écrasé mon autoexec ou quoi que ce soit d'autre du genre, donc tout ce que j'avais à faire était de fermer ma session cmd et de la rouvrir.
Godwin
Bien joué monsieur, c'était mon problème après avoir essayé de configurer tout ce qui est requis pour un environnement de développement Windows
Ruby
2

J'ai tiré mes cheveux avec cette erreur plusieurs fois. J'ai réussi à le faire disparaître parfois en redémarrant Apache / Nginx.

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

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

puis j'ai SUPPRIMÉ mon fichier gemfile.lock, puis j'ai relancé "bundle install". Je n'ai trouvé qu'alors que "bundle install" a réellement installé les bibliothèques correctes, etc.

LorneCurrie
la source
1

Sur Ubuntu, je devais le faire sudo apt-get update, puis l'installation de nodejs a fonctionné.

kilombo1
la source
1

lorsque je génère un contrôleur de rails g, j'ai la même erreur. Après cela, quand faire les changements suivants sur Gemfile (dans les rails 4), tout s'est bien passé.

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

Madhan Ayyasamy
la source
0

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

Vishnu Harish
la source
0

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

javabeangrinder
la source
0

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 JavaScript trouvée. J'ai pu courir rails scependant. Le correctif pour moi était de créer une nouvelle configuration d'exécution. Cela semble vraiment bizarre que la configuration Run devienne corrompue.

Jack
la source