ExecJS y no pudo encontrar un tiempo de ejecución de JavaScript


403

Estoy tratando de usar la plantilla Mongoid / Devise Rails 3.1 ( Mongoid y Devise ), y sigo recibiendo un error que indica que ExecJS no puede encontrar un tiempo de ejecución de JavaScript. Es justo cuando no tenía ninguno instalado, pero intenté instalar Node.js , Mustang y el Ruby Racer , pero nada funciona.

No pude encontrar un tiempo de ejecución de JavaScript. Consulte sstephenson / ExecJS (GitHub) para obtener una lista de tiempos de ejecución disponibles ( ExecJS::RuntimeUnavailable).

¿Qué necesito hacer para que esto funcione?


44
por cierto - estoy usando ubuntu karmic.
srboisvert

Realmente deberías considerar cambiar la respuesta. La respuesta de Node.js no es tan buena como la de execjs / rubyracer.
Sean Dunford

3
El rubyracer tiene otros problemas con él. Heroku ya no recomienda incluirlo en su Gemfile si puede evitarlo. devcenter.heroku.com/articles/rails-asset-pipeline#therubyracer Creo que la instalación de un tiempo de ejecución de Javascript adecuado en Ubuntu es la respuesta correcta a esta pregunta.
M. Scott Ford

Respuestas:


436

Usuarios de Ubuntu

Estoy en Ubuntu 11.04 y tuve problemas similares. La instalación de Node.js lo arregló.

A partir de Ubuntu 13.04 x64 solo necesita ejecutar:

sudo apt-get install nodejs

Esto solucionará el problema.


Usuarios de CentOS / RedHat

sudo yum install nodejs

1
lo intenté. sin suerte. Me pregunto si es un conflicto rvm o algo así. Todo lo que otras personas han sugerido no ha funcionado para mí.
srboisvert

76
gem 'execjs' gem 'therubyracer' es una solución mejor que esta.
dwaynemac

26
Heroku ahora está desalentando fuertemente el therubyracer debido al uso de memoria. Instalé nodejs en mi máquina de desarrollo por esta respuesta y saqué therubyracer de mi gemfile. Consulte también stackoverflow.com/questions/7092107/… .
Mark Berry

11
@dwaynemac No estoy de acuerdo. Prefiero que el tiempo de ejecución exista como una biblioteca de sistema operativo (como con Mac y Windows de forma predeterminada), en lugar de agregar otra gema a la lista de dependencias.
William Denniss

1
Parece que therubyracer y execjs están causando problemas con el despliegue de heroku, a menos que haya algo más que haya sido modificado que me haya perdido. Esta es la solución preferida.
Sturm

445

Simplemente agregue ExecJS y el Ruby Racer en su archivo de gemas y ejecute bundle installdespués.

gem 'execjs'

gem 'therubyracer'

Todo debería estar bien después.


66
Esto funcionó para mí, rails 3.1rc4 y Ubuntu 11.04 (mi primer intento con rails 3.1). Estaba tratando de generar un andamio cuando recibí el error. Todavía es bastante lamentable que los rieles 3.1 estén "rotos" fuera de la caja.
wonderfulthunk

35
Para Rails 3.1 RC 6, solo necesita especificargem 'therubyracer'
Amree

55
¿Hay alguna forma de incluir estas gemas en el Gemfile predeterminado cuando se crea una nueva aplicación?
Richard Fawcett

2
esta es una mejor solución que instalar node.js. Si está implementando en un servidor remoto o compartiendo la aplicación con otros desarrolladores, hacer que todos instalen node.js es mucho más difícil que simplemente ejecutar la instalación de paquetes, lo que harían de todos modos.
jdkealy

19
Heroku ahora está desalentando fuertemente el therubyracer debido al uso de memoria. Instalé nodejs en mi máquina de desarrollo ( github.com/joyent/node/wiki/… ) y saqué therubyracer de mi gemfile. Consulte también stackoverflow.com/questions/7092107/… .
Mark Berry

77

En tu archivo Gem, escribe

gem 'execjs'
gem 'therubyracer'

y luego correr

bundle install

Todo funciona bien para mí :)


99
No necesita agregar 'execjs'
miguelSantirso

Sí, tienes razón en los rieles 3.2.1, solo tienes que usar gem'therubyracer '
manish nautiyal

Gracias @manish nautiyal y @ Peter Mortensen. funciona para mí
Ravindra

48

Tuve un problema similar: mi aplicación Rails 3.1 funcionó bien en Windows pero obtuvo el mismo error que el OP cuando se ejecutaba en Linux. La solución que funcionó para mí en ambas plataformas fue agregar lo siguiente a mi Gemfile:

gem 'therubyracer', :platforms => :ruby

El truco es saber que en :platforms => :rubyrealidad significa solo usar esta gema con "C Ruby (MRI) o Rubinius, pero NO con Windows".

Otros valores posibles para :platformsse describen en la bundlerpágina del manual .

FYI: Windows tiene un motor JavaScript incorporado que execjspuede ubicar. En Linux no hay una versión incorporada, aunque hay varias disponibles que se pueden instalar. therubyraceres uno de ellos. Otros se enumeran en el execjs archivo README.md .


Gracias, este me lo arregló en Ubuntu Oneiric usando la instalación rvm de ruby ​​1.9.3 y Rails 3.2.1
Yashima

¡Muchas gracias señor!
DaTroop

Me encontré con el error en un servidor CentOS con node.js instalado. Esto me hizo pasar. ¡Gracias!
ncherro

36

Agregar la siguiente gema a mi Gemfile resolvió el problema:

gem 'therubyracer'

Luego agrupa tus nuevas dependencias:

$ bundle install

también agregue gema 'execjs' en Gemfile
Bijendra

66
execjs ya está incluido por rails ahora. Solo se requirió durante la liberación de candidatos.
JDutil

16

Una forma alternativa es simplemente agrupar sin el grupo de gemas que contiene las cosas que no tiene.

Entonces hazlo:

bundle install --without assets

no tiene que modificar el Gemfile en absoluto, siempre que no esté haciendo cosas de la cadena de activos, lo que generalmente se aplica en entornos que no son de desarrollo. Bundle recordará su configuración '--sin' en el archivo .bundle / config.


La mejor respuesta. Trabajó para rails versión 3.2.3
Frantzdy Romain

1
Esto es genial, y una solución tan simple. El sitio de Heroku dice que RubyRacer ya no es necesario (con la pila Cedar), por lo que me sorprendió por qué de repente mi programa no se estaba ejecutando localmente. Esto hizo el truco.
Mike Blyth

6

Agregue las siguientes gemas en su archivo de gemas

gem 'therubyracer'
gem 'execjs'

y correr

bundle install

estás listo :)


6

Para Amazon Linux (AMI):

sudo yum install nodejs npm --enablerepo=epel

1
Gracias, esto debería estar en un nivel superior
David Mauricio

Esto fue esencial para que una implementación de capistrano funcionara en la distribución de Linux estándar de AWS.
jjk


4

Tuve este mismo error, pero solo en mi servidor provisional, no en mi entorno de producción. nodejs ya estaba instalado en ambos entornos.

Escribiendo:

which node

Descubrí que el comando del nodo estaba ubicado en: / usr / bin / node en producción pero: / usr / local / bin / node en la preparación.

Después de crear un enlace simbólico en la puesta en escena, es decir:

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

la aplicación luego funcionó en la puesta en escena.

Sin despeinarse sin problemas.


funciona como encanto! Un consejo: que necesitaba enlace simbólico para hacer nodejstambién
Rafael Gomes Francisco

3

No use RubyRacer ya que es malo para la memoria. Instalar Node.js como lo sugieren algunas personas aquí es una mejor idea.

Esta lista de tiempos de ejecución disponibles que puede utilizar ExecJs Library también documenta el uso de Node.js

https://github.com/sstephenson/execjs

Entonces, Node.js no es una exageración, y una solución mucho mejor que usar RubyRacer.



0

Comencé a tener este problema cuando comencé a usar rbenv con Ruby 1.9.3 donde, como mi sistema, ruby ​​es 1.8.7. La gema está instalada en ambos lugares, pero por alguna razón el script de rails no la recogió. Pero agregar los "execjs" y "therubyracer" al Gemfile hizo el truco.


0

En su archivo de gemas, descomente esta línea.

19 # gem 'therubyracer', plataformas:: ruby

Y ejecuta la instalación del paquete

Estás listo para trabajar :)


0

Intentando depurar en RubyMine usando Ubuntu 18.04, Ruby 2.6. *, Rails 5 y RubyMine 2019.1.1 , me encontré con el mismo problema.

Para resolver el problema, descomenté la mini_racerlínea de mi Gemfiley luego ejecuté bundle:

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

Cambiar a:

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

0

Instalé a nodetravés de nvm y encontré este problema al implementar con Capistrano. Capistrano no cargó nvm automáticamente porque se ejecuta de forma no interactiva.

Para solucionarlo, simplemente mueva las líneas que nvm agrega a su ~/.bashrcparte superior. El archivo se verá así:

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.