ruby on rails 3.1 - rails - ExecJS y no pudo encontrar un tiempo de ejecución de JavaScript
could not find a javascript runtime see https github com rails execjs (14)
Estoy intentando usar la plantilla Mongoid / Devise Rails 3.1 ( Mongoid y Devise ), y me sigue ExecJS un error que indica que ExecJS no puede encontrar un tiempo de ejecución de JavaScript. Justo cuando no tenía ninguno instalado, pero he intentado instalar Node.js , Mustang y Ruby Racer , pero nada funciona.
No pude encontrar un tiempo de ejecución de JavaScript. Consulte sstephenson/ExecJS (GitHub) para obtener una lista de los tiempos de ejecución disponibles ( ExecJS::RuntimeUnavailable
).
¿Qué necesito hacer para que esto funcione?
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 necesitas ejecutar:
sudo apt-get install nodejs
Esto solucionará el problema.
CentOS / RedHat Usuarios
sudo yum install nodejs
Añade las siguientes gemas en tu archivo de gemas
gem ''therubyracer''
gem ''execjs''
y correr
bundle install
estás listo :)
Agregar la siguiente gema a mi Gemfile resolvió el problema:
gem ''therubyracer''
Luego agrupa tus nuevas dependencias:
$ bundle install
Comencé a tener este problema cuando comencé a usar rbenv con Ruby 1.9.3, mientras que mi sistema ruby es 1.8.7. La gema está instalada en ambos lugares, pero por alguna razón, el script de rieles no la detectó. Pero agregar los "execjs" y "therubyracer" al Gemfile hizo el truco.
En tu archivo de gemas, escribe
gem ''execjs''
gem ''therubyracer''
y luego correr
bundle install
Todo funciona bien para mí :)
En tu archivo de gemas. Descomenta esta línea.
19 # gema ''therubyracer'', plataformas:: ruby
Y ejecute bundle install
Estás listo para trabajar. :)
No uses RubyRacer ya que es malo en 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 ser utilizada por la Biblioteca ExecJs también documenta el uso de Node.js
Entonces, Node.js no es una solución excesiva y mucho mejor que usar RubyRacer.
Para Amazon Linux (AMI):
sudo yum install nodejs npm --enablerepo=epel
Para su información, esto solucionó el problema para mí ... es un problema de ruteo: http://forums.freebsd.org/showthread.php?t=35539
Solía agregar el Ruby Racer al archivo Gem para solucionarlo. Pero hey, Node.js funciona!
Solo agregue ExecJS y Ruby Racer en su archivo gem y ejecute bundle install
después.
gem ''execjs''
gem ''therubyracer''
Todo debería estar bien después.
Tuve el mismo error, pero solo en mi servidor de pruebas, no en mi entorno de producción. nodejs ya estaba instalado en ambos entornos.
Escribiendo:
which node
Descubrí que el comando de nodo estaba ubicado en: / usr / bin / node en producción pero: / usr / local / bin / node en la puesta en escena.
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 trabajó en la puesta en escena.
Sin despeinarse sin problemas.
Tuve un problema similar: mi aplicación Rails 3.1 funcionó bien en Windows pero tuvo el mismo error que el OP cuando se ejecutó en Linux. La solución que me funcionó en ambas plataformas fue agregar lo siguiente a mi Gemfile
:
gem ''therubyracer'', :platforms => :ruby
El truco es saber que :platforms => :ruby
realidad significa solo usar esta gema con "C Ruby (MRI) o Rubinius, pero NO con Windows".
Otros valores posibles para :platforms
se describen en la página de manual de bundler
.
FYI: Windows tiene un motor de JavaScript execjs
que los execjs
pueden localizar. En Linux no hay un componente incorporado, aunque hay varios disponibles que se pueden instalar. therubyracer
es uno de ellos. Otros se enumeran en el execjs
README.md .
Una forma alternativa es simplemente agrupar sin el grupo de gemas que contiene las cosas que no tienes.
Así que hazlo:
bundle install --without assets
no tiene que modificar el Gemfile en absoluto, dado que, por supuesto, 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 ''--without'' en el archivo .bundle / config.