execJs: "Impossibile trovare un runtime JavaScript" ma execjs E therubyracer sono in Gemfile


191

Ricevo questo errore:

rastrello interrotto! Impossibile trovare un runtime JavaScript. Vedi https://github.com/sstephenson/execjs ,

Ho già trascorso più ore a cercare su Google, quindi sono disposto ad ammetterlo. Credo che questo sia un bug di execJs.

Da tutti i post, questo è un problema molto comune con le rotaie 3.1. Un runtime js è ora necessario per quelle che ora sono gemme standard come coffee-script e sass.

La maggior parte di questi casi è stata risolta aggiungendo le gemme "execjs" e "therubyracer" all'app Gemfile, quindi eseguendo "bundle update" e / o "bundle install". Ma non per me.

Immagino di essere stato fortunato. Sto eseguendo rails 3.1.3 / ruby ​​1.9 su una vecchia versione di Redhat Linux 4 (2.6.9-101.ELsmp) e gcc è 3.4.6.

Altre correzioni segnalate non aiutano, non sono in grado di installare "nodejs", "johnson" o "mustang", mentre gli altri runtime eseguono e individuano. Non eseguiranno / installeranno sul mio sistema.

Ho bisogno di risolvere il problema facendo in modo che execJs non riesca a localizzare 'therubyracer'. Ecco il Gemfile (e l'installazione del bundle dice 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

Ed ecco una traccia:

~/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>'

Non c'è nulla di interessante nel registro di sviluppo.

Ecco la directory 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  

Ho anche provato execjs-1.2.13. Stesso problema.

Se commento execjs.rb di seguito, posso eseguire il rake senza l'errore:

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

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

Ma poi non ho un runtime.

Riesco a vedere da dove proviene il testo dell'errore in 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

Quindi la domanda è, dal momento che ho installato 'therubyracer', perché runtimes.rb non riesce a trovarlo? ExecJs è rotto?

Qui è 'Therubyracer':

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

Come posso risolvere questo problema?

Risposte:


346

Utenti Ubuntu:

Ho avuto lo stesso problema e l'ho risolto installando nodejssul mio sistema indipendentemente dalla gemma.

su Ubuntu è: sudo apt-get install nodejs

Sto usando Ubuntu 11.10 a 64 bit

aggiornamento: dalla seguente risposta di @Galina suppongo che sia necessaria l'ultima versione di nodejs, quindi @ steve98177 la tua migliore opzione su una scatola redhat (o CentOS) è installare dal codice sorgente come ha fatto @Galina, ma come te non riesci a "creare / installare" su questa casella?, ti suggerisco di provare a installare un fedora rpm (long shot) https://github.com/joyent/node/wiki/Installing-Node.js-via-package- manager o trova un altro box RH / CentOs (su cui puoi "creare") e crea il tuo rpm personale e installalo sul box RH originale (se il vecchio glibc su RH funziona bene).

Il vero problema qui (IMHO) è l'installazione di Gemme che hanno dipendenze dai pacchetti installati al di fuori dell'ambiente ruby, c'è un modo di sapere prima di installare? una RFI per gemme o bundler?


Utenti CentOS / RedHat:

sudo yum install nodejs

1
su Ubuntu ho dovuto sudo apt-get update e quindi l'installazione di nodejs ha funzionato.
Vineet Bhatia,

Ho avuto lo stesso problema sul mio Ubuntu 12.04-32 bit con ruby ​​1.9.3p392, rotaie 3.2.3, gem 1.8.25. Stavo ricevendo lo stesso errore durante l'esecuzione di "console script / rails" e "server script / rails". sudo apt-get install nodejsrisolto il mio problema.
ajin6747

Deve essere Nodo però? Sono abbastanza sicuro che puoi usarne altri come therubyracer, therubyrhino o Apple JavaScriptCore. So che ExecJS li supporta. github.com/sstephenson/execjs
Dustin Griffith,

Tentare di installare gem qualsiasi runtime alternativo supportato da execjs non mi ha portato da nessuna parte. infatti, l'installazione di nodejs ha funzionato. Lungi dall'essere l'ideale, ma ti fa passare il post.
Mitch Kent,

Uso Ubuntu 14.04. Problema risolto dopo l'installazione nodejs.
Charles Wu,

108

Nel tuo file di gemme aggiungi:

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

Per maggiori dettagli: ExecJS e impossibile trovare un runtime JavaScript


1
Grazie, ma non funziona. Guarda questo tentativo di far riconoscere rubyrhino da execjs: gemma che rinoceronte /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
steve98177

Ha funzionato anche per me, una nota per i principianti delle rotaie come me: il Gemfile è nella cartella del progetto.
McSas,

1
Per quelli di voi per i quali questo non ha funzionato: provate gem install therubyracerprima a correre .
Maksimov,

A chiunque avesse questo problema, stavo installando il progetto dashing di Shopify su un sistema CentOS 5.8 e stavo correndo il problema del runtime di execjs. Ho aggiunto questo al mio Gemfilee ha funzionato.
Casey,

Ok funziona, va bene. Ma perché dobbiamo farlo? Ogni volta che aggiungo una linea al mio Gemfile, deve avere davvero senso per i progetti personali e per i progetti di gruppo, è ancora più sporco farlo poiché questo ha un impatto sulle macchine di altri mentre il problema era specifico per l'ambiente. IMHO non è una soluzione decente a lungo termine.
Augustin Riedinger,


13

Quando si crea un progetto vuoto, questa riga viene commentata in Gemfile. Basta decommentarlo e raggrupparlo!

gem 'therubyracer', :platforms => :ruby

2
... e fagotto! Questa è di gran lunga la risposta più semplice.
etusm,


4

Sto usando Ubuntu 11.10-32 bit con ruby ​​1.9.3p194, rotaie 3.2.3, gem 1.8.24. Stavo ricevendo lo stesso errore Javascript durante l'esecuzione di "console script / rails".

Tuttavia, fare un "sudo apt-get install nodejs" ha risolto il mio problema.


4

Gli utenti Fedora NON saranno in grado di eseguire un semplice "yum install nodejs" a causa di gravi conflitti di denominazione e posizionamento dei file che impediscono a questo pacchetto di essere disponibile anche attraverso i repository Fedora.

Apparentemente c'è almeno un repository alternativo disponibile con una build alternativa che può funzionare, ma sono due troppi "alternati" per essere disposto a usarlo - Sto cercando un'altra alternativa.


Questo potrebbe essere vero all'epoca, ma ora funziona bene (dicembre 2015)
Mitch Kent,


4

Se fossi su Ubuntu $ sudo apt-get install nodejs

Cerca di non usare altri sistemi come Windows per lo sviluppo. Pensa che quasi tutti i server nel mondo sono server Linux, quindi quando provi a distribuire quell'applicazione sarà più facile se lo hai sviluppato anche su un ambiente Linux o Unix.


3

Ho avuto lo stesso problema su un server di gestione temporanea. Non ho avuto problemi nell'esecuzione di attività di rake sulla mia macchina di sviluppo locale, ma la distribuzione sul server di gestione temporanea non è riuscita con il messaggio di errore "Impossibile trovare un runtime JavaScript" durante il tentativo di eseguire gli asset: attività di rastrello precompilata .

Naturalmente, nel mio Gemfile c'erano therubyracer ed execjs e stavo usando le ultime versioni. I miei file Gemfile.lock corrispondevano e ho verificato ulteriormente le versioni eseguendo bundle show .

Dopo aver cercato su Google, ho finito per eliminare tutte le mie gemme e reinstallarle risolvere il problema. Ancora non so quale fosse la causa principale, ma forse questo ti aiuterà.

Ecco come appare il mio ambiente, BTW:

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

Sto riscontrando questo problema su Ubuntu 10.04. Non pensavo che valesse la pena usarlo con Ubuntu 12.04, ma credo che lo sia! Quindi, nel mio caso, penso che il problema sia che ho compilato e ricompilato il mio rubino (1.9.3, 1.9.2) troppe volte. Lo sto ricompilando di nuovo per vedere se questo risolve il problema. Oh e sto aggiornando il mio apt-get all'ultimo.
Victor Pudeyev,

3

Ho avuto lo stesso problema. L'aggiunta delle gemme 'execjs' e 'therubyracer' non funziona per me. apt-get install nodejs - inoltre non funziona. Sto usando Ubuntu 10.04 a 64 bit.

Ma mi ha aiutato a: 1. Ho creato una cartella vuota (ad esempio "java"). 2. Dal terminale nella cartella che ho creato faccio:

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

Dopodiché eseguo "bundle install" come al solito (dalla cartella con il progetto ruby ​​& rails). E il problema è stato risolto. Ruby non ha dovuto reinstallare.


chiunque provi questo ora riceverà un errore. prova a seguire il clone git github.com/nodejs/node
Yeasin Ar Rahman

2

Ho avuto questo mi viene in mente sul mio computer Windows, risulta che il problema era abbastanza diverso. Avevo rimosso accidentalmente alcuni percorsi dalla mia %PATH%variabile. È stato semplicemente riavviato il prompt dei comandi. Sembra che ci sia stato un runtime JS in uno di quei percorsi mancanti.


mi è capitato anche di aver rimosso un po 'di percorso dalla mia macchina Windows, vorresti dire come hai aggiunto il percorso js
Hussain Akhtar Wahid' Ghouri '

@HussainAkhtarWahid, non ho sovrascritto il mio autoexec o altro, quindi tutto quello che dovevo fare era chiudere la mia sessione cmd e riaprirla.
Godwin,

Ben fatto signore, questo è stato il mio problema dopo aver provato a configurare tutto il necessario per un ambiente di sviluppo ruby ​​di Windows
HostMyBus,

2

Mi sono tolto i capelli con questo errore alcune volte. Sono riuscito a farlo sparire qualche volta riavviando Apache / Nginx.

Quindi l'ho risolto come sopra, aggiungendo quanto segue al file GEM:

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

e poi ho cancellato il mio file gemfile.lock e quindi ho eseguito nuovamente "bundle install". Ho scoperto che solo allora "bundle install" ha effettivamente installato le librerie corrette, ecc.


1

Su Ubuntu dovevo sudo apt-get updatee quindi l'installazione di nodejs funzionava.


1

quando genera rails g controller ho avuto lo stesso errore. Dopodiché, quando sono state apportate le seguenti modifiche su Gemfile (nelle rotaie 4), tutto è andato liscio. Le modifiche che ho apportato sono state

gem 'execjs'
gem 'therubyracer', "0.11.4"
Dopodiché posso eseguire il server e eseguire tutte le operazioni di base sull'applicazione.


0

aggiungi nel tuo gemfile che si trova nella cartella che hai creato: gem 'execjs' gem 'therubyracer'


0

Nel mio caso l'esecuzione del bundlecomando ha fatto il trucco. Confido che si ritrovino allora.


0

Ho avuto questo problema durante l'utilizzo di RubyMine (6.3.3). Un giorno ho provato a eseguire il mio codice, ma non ha funzionato e mi sono lamentato del mancato funzionamento di JavaScript. Sono stato in grado di correre rails sperò. La soluzione per me era la creazione di una nuova configurazione di esecuzione. Sembra davvero bizzarro che la configurazione di Run diventi corrotta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.