ExecJS e impossibile trovare un runtime JavaScript


403

Sto cercando di utilizzare il modello Mongoid / Devise Rails 3.1 ( Mongoid e Devise ) e continuo a ricevere un errore affermando che ExecJS non riesce a trovare un runtime JavaScript. Abbastanza giusto quando non ne ho installato nessuno, ma ho provato a installare Node.js , Mustang e Ruby Racer , ma non funziona nulla.

Non sono riuscito a trovare un runtime JavaScript. Vedi sstephenson / ExecJS (GitHub) per un elenco di runtime disponibili ( ExecJS::RuntimeUnavailable).

Cosa devo fare per farlo funzionare?


4
btw - Sto usando Ubuntu Karmic.
srboisvert,

Dovresti davvero considerare di cambiare la risposta. La risposta Node.js non è buona quanto il execjs / rubyracer.
Sean Dunford,

3
Il rubyracer ha altri problemi con esso. Heroku non consiglia più di includerlo nel tuo Gemfile se puoi evitarlo. devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer Penso che l'installazione di un runtime Javascript corretto su Ubuntu sia la risposta corretta a questa domanda.
M. Scott Ford,

Risposte:


436

Utenti Ubuntu

Sono su Ubuntu 11.04 e ho avuto problemi simili. L'installazione di Node.js l'ha risolto.

A partire da Ubuntu 13.04 x64 devi solo eseguire:

sudo apt-get install nodejs

Questo risolverà il problema.


Utenti CentOS / RedHat

sudo yum install nodejs

1
provato. senza fortuna. Mi chiedo se si tratti di un conflitto rvm o qualcosa del genere. Tutto ciò che altre persone hanno suggerito non ha funzionato per me.
srboisvert,

76
gem 'execjs' gem 'therubyracer' è una soluzione migliore di questa.
dwaynemac,

26
Heroku ora sta fortemente scoraggiando il terapeuta a causa dell'uso della memoria. Ho installato nodejs sul mio computer di sviluppo per questa risposta e ho tolto dal mio file gemello therubyracer. Vedi anche stackoverflow.com/questions/7092107/… .
Mark Berry,

11
@dwaynemac Non sono d'accordo. Preferirei che il runtime esistesse come libreria del sistema operativo (come per impostazione predefinita con Mac e Windows), piuttosto che aggiungere un altro gioiello all'elenco delle dipendenze.
William Denniss,

1
Sembra che therubyracer ed execjs stiano causando problemi con la distribuzione di heroku, a meno che non ci sia qualcos'altro che è stato modificato che mi è mancato. Questa è la soluzione preferita.
Sturm

445

Aggiungi ExecJS e Ruby Racer nel tuo file gem ed esegui bundle installdopo.

gem 'execjs'

gem 'therubyracer'

Tutto dovrebbe andare bene dopo.


6
Questo ha funzionato per me, rails 3.1rc4 e Ubuntu 11.04 (il mio primo tentativo con rails 3.1). Stavo cercando di generare un'impalcatura quando ho ricevuto l'errore. Ancora piuttosto zoppo che le rotaie 3.1 siano "rotte" fuori dalla scatola.
wonderfulthunk,

35
Per Rails 3.1 RC 6, devi solo specificaregem 'therubyracer'
Amree

5
Esiste un modo per includere queste gemme nel Gemfile predefinito quando viene creata una nuova applicazione?
Richard Fawcett,

2
questa è una soluzione migliore rispetto all'installazione di node.js. Se stai eseguendo la distribuzione su un server remoto o condividendo l'app con altri sviluppatori, avere tutti installano node.js è molto più complicato della semplice installazione del bundle, che farebbero comunque.
jdkealy,

19
Heroku ora sta fortemente scoraggiando il terapeuta a causa dell'uso della memoria. Ho installato nodejs sul mio computer di sviluppo ( github.com/joyent/node/wiki/… ) e ho rimosso therubyracer dal mio gemfile. Vedi anche stackoverflow.com/questions/7092107/… .
Mark Berry,

77

Nel tuo file Gem, scrivi

gem 'execjs'
gem 'therubyracer'

e poi corri

bundle install

Tutto funziona bene per me :)


9
Non è necessario aggiungere 'execjs'
miguelSantirso,

Sì, proprio in rotaia 3.2.1 devi usare solo gem'therubyracer '
manish nautiyal

Grazie @manish nautiyal e @ Peter Mortensen. funziona per me
Ravindra il

48

Ho avuto un problema simile: la mia app Rails 3.1 ha funzionato bene su Windows ma ha avuto lo stesso errore dell'OP durante l'esecuzione su Linux. La soluzione che ha funzionato per me su entrambe le piattaforme è stata l'aggiunta di quanto segue al mio Gemfile:

gem 'therubyracer', :platforms => :ruby

Il trucco è sapere che in :platforms => :rubyrealtà significa usare questa gemma solo con "C Ruby (MRI) o Rubinius, ma NON con Windows".

Altri valori possibili per :platformssono descritti nella la bundlerpagina man .

Cordiali saluti: Windows ha un motore JavaScript incorporato che execjspuò individuare. Su Linux non esiste un built-in sebbene siano disponibili diversi che è possibile installare. therubyracerè uno di questi. Altri sono elencati nel file execjs README.md .


Grazie, questo è stato risolto per me su Ubuntu Oneiric usando l'installazione rvm di ruby ​​1.9.3 e Rails 3.2.1
Yashima

Grazie mille signore!
DaTroop,

Ho riscontrato l'errore su un server CentOS con node.js installato. Questo mi ha superato. Grazie!
ncherro,

36

L'aggiunta della seguente gemma al mio Gemfile ha risolto il problema:

gem 'therubyracer'

Quindi raggruppa le tue nuove dipendenze:

$ bundle install

aggiungi anche gem "execjs" nel Gemfile
Bijendra,

6
execjs è già incluso nelle rotaie ora. È stato richiesto anche solo durante i candidati al rilascio.
JDutil,

16

Un modo alternativo è semplicemente raggruppare senza il gruppo gemma che contiene le cose che non hai.

Quindi fai:

bundle install --without assets

non è necessario modificare affatto il Gemfile, purché ovviamente non si stiano eseguendo attività nella catena di risorse, che di solito si applicano in ambienti non di sviluppo. Il pacchetto ricorderà l'impostazione '--without' nel file .bundle / config.


Migliore risposta. Ha funzionato per le rotaie versione 3.2.3
Frantzdy Romain,

1
È fantastico e una soluzione così semplice. Il sito Heroku dice che RubyRacer non è più necessario (con stack di cedro), quindi ero perplesso sul motivo per cui improvvisamente il mio programma non era in esecuzione localmente. Questo ha funzionato.
Mike Blyth,

6

Aggiungi le seguenti gemme nel tuo file gem

gem 'therubyracer'
gem 'execjs'

e corri

bundle install

hai fatto :)


6

Per Amazon Linux (AMI):

sudo yum install nodejs npm --enablerepo=epel

1
Grazie, questo dovrebbe essere ad un livello superiore
David Mauricio,

questo era essenziale per far funzionare una distribuzione capistrano sulla distribuzione Linux standard AWS.
jjk


4

Ho avuto lo stesso errore, ma solo sul mio server di gestione temporanea non nel mio ambiente di produzione. nodejs era già installato su entrambi gli ambienti.

Digitando:

which node

Ho scoperto che il comando node si trovava in: / usr / bin / node in produzione ma: / usr / local / bin / node nella stadiazione.

Dopo aver creato un collegamento simbolico sulla stadiazione, ad esempio:

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

l'applicazione ha quindi funzionato con la messa in scena.

Nessun problema, nessun problema.


funziona come un incantesimo! Un consiglio: avevo bisogno di make link simbolico per nodejsanche
Rafael Gomes Francisco

3

Non usare RubyRacer perché è un male per la memoria. Installare Node.js come suggerito da alcune persone qui è un'idea migliore.

Questo elenco di runtime disponibili che possono essere utilizzati dalla Libreria ExecJs documenta anche l'uso di Node.js

https://github.com/sstephenson/execjs

Quindi, Node.js non è una soluzione eccessiva e molto migliore rispetto all'utilizzo di RubyRacer.



0

Ho iniziato a riscontrare questo problema quando ho iniziato a utilizzare rbenv con Ruby 1.9.3 dove il mio sistema ruby ​​è 1.8.7. La gemma è installata in entrambi i posti ma per qualche ragione lo script di rotaie non l'ha presa. Ma l'aggiunta di "execjs" e "therubyracer" al Gemfile ha funzionato.


0

Nel tuo file gem Uncomment questa riga.

19 # gemma 'therubyracer', piattaforme:: ruby

Ed esegui il bundle install

Sei pronto a lavorare. :)


0

Tentando di eseguire il debug in RubyMine utilizzando Ubuntu 18.04, Ruby 2.6. *, Rails 5 e RubyMine 2019.1.1 , ho riscontrato lo stesso problema.

Per risolvere il problema, ho rimosso il commento dalla mini_racerriga Gemfilee quindi ho eseguito bundle:

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

Passare a:

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

0

Ho installato nodetramite nvm e ho riscontrato questo problema durante la distribuzione con Capistrano. Capistrano non ha caricato nvm automaticamente perché funziona in modo non interattivo.

Per risolvere, sposta semplicemente le linee che nvm aggiunge al tuo ~/.bashrcverso l'alto. Il file avrà quindi un aspetto simile al seguente:

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
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.