execJs: 'No se pudo encontrar un tiempo de ejecución de JavaScript' pero execjs Y therubyracer están en Gemfile

191

Recibo este error:

rastrillo abortado! No se pudo encontrar un tiempo de ejecución de JavaScript. Ver https://github.com/sstephenson/execjs ,

Ya he pasado más horas buscando en google, entonces estoy dispuesto a admitirlo. Creo que este es un error ejecutivo.

De todas las publicaciones, este es un problema muy común con rails 3.1. Ahora se necesita un tiempo de ejecución js por lo que ahora son gemas estándar como coffee-script y sass.

La mayoría de estos casos se resolvieron agregando las gemas 'execjs' y 'therubyracer' a la aplicación Gemfile, y luego ejecutando 'actualización de paquete' y / o 'instalación de paquete'. Pero no para mí.

Supongo que tuve suerte. Estoy ejecutando rails 3.1.3 / ruby ​​1.9 en una versión anterior de Redhat Linux 4 (2.6.9-101.ELsmp) y gcc es 3.4.6.

Otras correcciones reportadas no ayudan, no puedo instalar 'nodejs', 'johnson' o 'mustang', se supone que los otros ejecutables ejecutan y usan. No harán / instalarán en mi sistema.

Necesito solucionar el problema que causa que los ejecutivos no puedan localizar 'therubyracer'. Aquí está el Gemfile (y la instalación del paquete 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

Y aquí hay un rastro:

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

No hay nada interesante en el registro de desarrollo.

Aquí está el directorio 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  

También probé execjs-1.2.13. El mismo problema.

Si comento execjs.rb a continuación, puedo ejecutar rake sin el error:

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

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

Pero entonces no tengo tiempo de ejecución.

Puedo ver de dónde viene el texto de error en 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

Entonces la pregunta es, ya que tengo instalado 'therubyracer', ¿por qué no puede encontrarlo runtimes.rb? ¿Los ejecutivos están rotos?

Aquí es 'therubyracer':

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

¿Cómo puedo arreglar esto?

steve98177
fuente

Respuestas:

346

Usuarios de Ubuntu:

Tuve el mismo problema y lo solucioné instalando nodejsen mi sistema independientemente de la gema.

en ubuntu es: sudo apt-get install nodejs

Estoy usando 64bit ubuntu 11.10

actualización: De la respuesta de @Galina a continuación, supongo que se requiere la última versión de nodejs, por lo que @ steve98177 su mejor opción en un cuadro redhat (o CentOS) es instalar desde el código fuente como lo hizo @Galina, pero como usted no puede "hacer / instalar" en este cuadro ?, sugiero que intente instalar un rpm de fedora (tiro largo) https://github.com/joyent/node/wiki/Installing-Node.js-via-package- administrador o busque otro cuadro RH / CentOs (que puede 'hacer') y cree sus propias rpm e instálelo en el cuadro RH original (si el viejo glibc en RH funciona bien).

El verdadero problema aquí (en mi humilde opinión) es instalar gemas que tienen dependencias en paquetes instalados fuera del entorno de ruby, ¿hay alguna forma de saber antes de instalar? una RFI para gemas o bundler?


Usuarios de CentOS / RedHat:

sudo yum install nodejs
Paul Williams
fuente
1
en ubuntu tuve que sudo apt-get update y luego la instalación de nodejs funcionó.
Vineet Bhatia
Tuve el mismo problema en mi Ubuntu 12.04-32 bit con ruby ​​1.9.3p392, rails 3.2.3, gem 1.8.25. Recibía el mismo error al ejecutar "script / rails console" y "script / rails server". sudo apt-get install nodejsresuelto mi problema
ajin6747
Sin embargo, ¿tiene que ser Node? Estoy bastante seguro de que puede usar otros como therubyracer, therubyrhino o Apple JavaScriptCore. Sé que ExecJS los apoya. github.com/sstephenson/execjs
Dustin Griffith
Intentar instalar gemas en cualquiera de los tiempos de ejecución alternativos compatibles con execjs no me llevó a ninguna parte. de hecho, la instalación de nodejs funcionó. Lejos de ser ideal, pero te lleva más allá de la publicación.
Mitch Kent
Yo uso ubuntu 14.04. Problema resuelto después de instalar nodejs.
Charles Wu
108

En su archivo de gemas agregue:

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

Para más detalles: ExecJS y no pudo encontrar un tiempo de ejecución de JavaScript

Tiago
fuente
1
Gracias, pero eso no funciona. Mire este intento de que rubyrhino sea reconocido por execjs: gem que rhino /usr/local/lib/ruby/gems/1.9.1/gems/therubyrhino-1.73.1/lib/rhino.rb
steve98177
También funcionó para mí, una nota para principiantes como yo: el Gemfile está en la carpeta del proyecto.
McSas
1
Para aquellos de ustedes para quienes esto no funcionó: intente correr gem install therubyracerprimero.
maksimov
Para cualquier otra persona que tenga este problema, estaba instalando el proyecto de Shopify en un sistema CentOS 5.8 y me encontraba con el problema del tiempo de ejecución de execjs. Agregué esto a mi Gemfiley funcionó.
Casey
Ok funciona, bien. Pero, ¿por qué tenemos que hacer eso? Cada vez que agrego una línea a mi Gemfile, realmente debe tener sentido para proyectos personales, y para proyectos de equipo, es aún más sucio hacerlo, ya que esto afecta las máquinas de otros mientras el problema era específico del entorno. En mi humilde opinión, esa no es una solución muy decente a largo plazo.
Augustin Riedinger
13

Cuando crea un proyecto vacío, esta línea se comenta en Gemfile. ¡Solo descomenta y agrupa!

gem 'therubyracer', :platforms => :ruby
Santhosh
fuente
2
... y paquete! Esta es, con mucho, la respuesta más fácil.
etusm
4

Estoy usando Ubuntu 11.10- 32 bit con ruby ​​1.9.3p194, rails 3.2.3, gem 1.8.24. Recibía el mismo error de Javascript al ejecutar "consola de script / rails".

Sin embargo, hacer un "sudo apt-get install nodejs" resolvió mi problema.

Vibin B. Nair
fuente
4

Los usuarios de Fedora NO PODRÁN hacer una simple "yum install nodejs" debido a serios conflictos de nombres y ubicación de archivos que evitan que este paquete esté disponible a través de los repositorios de Fedora.

Aparentemente hay al menos un repositorio alternativo disponible con una compilación alternativa que puede funcionar, pero son dos "alternativas" demasiadas para que esté dispuesto a usarlo. Estoy buscando otra alternativa.

Matt Heck
fuente
Esto puede haber sido cierto en ese momento, pero funciona bien ahora (diciembre de 2015)
Mitch Kent
4

Si estuvieras en ubuntu $ sudo apt-get install nodejs

Intente no utilizar otros sistemas como Windows para el desarrollo. Piense que casi todos los servidores en el mundo son servidores Linux, por lo que cuando intente implementar esa aplicación, será más fácil si también lo ha desarrollado en un entorno Linux o Unix.

Julian Arango López
fuente
3

Tuve el mismo problema en un servidor provisional. No tuve problemas al ejecutar tareas de rastrillo en mi máquina de desarrollo local, pero la implementación en el servidor de ensayo falló con el mensaje de error "No se pudo encontrar un tiempo de ejecución de JavaScript" al intentar ejecutar los activos: precompilar la tarea de rastrillo.

Por supuesto, therubyracer y execjs estaban en mi Gemfile, y estaba usando las últimas versiones. Mis archivos Gemfile.lock coincidían, y verifiqué aún más las versiones ejecutando bundle show .

Después de buscar en Google, terminé eliminando todas mis gemas y reinstalándolas, lo que solucionó el problema. Todavía no sé cuál fue la causa raíz, pero tal vez esto te ayude.

Así es como se ve mi entorno, por cierto:

Ubuntu 10.04.3 LTS
rbenv
Ruby 1.9.2-p290
bundler-1.0.21
execjs-1.3.0
therubyracer-0.9.9
TheSpend
fuente
Tengo este problema en ubuntu 10.04. No pensé que valiera la pena usar ubuntu 12.04, ¡pero supongo que sí! Entonces, creo que en mi caso el problema es que compilé y volví a compilar mi rubí (1.9.3, 1.9.2) demasiadas veces. Lo estoy compilando nuevamente para ver si esto lo soluciona. Ah, y estoy actualizando mi apt-get a la última.
Victor Pudeyev
3

Yo tuve el mismo problema. Agregar las gemas 'execjs' y 'therubyracer' no funciona para mí. apt-get install nodejs: tampoco funciona. Estoy usando 64bit ubuntu 10.04.

Pero me ayudó lo siguiente: 1. Creé una carpeta vacía (por ejemplo, "java"). 2. Desde el terminal en la carpeta que creé, hago:

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

Después de eso ejecuto la "instalación de paquete" como de costumbre (desde la carpeta con el proyecto ruby ​​& rails). Y el problema fue resuelto. Ruby no tuvo que reinstalar.

Galina
fuente
cualquiera que intente esto ahora recibirá un error. intente seguir git clone github.com/nodejs/node
Yeasin Ar Rahman
2

Se me ocurrió esto en mi máquina Windows, resulta que el problema era bastante diferente. Accidentalmente había eliminado algunos caminos de mi %PATH%variable. Simplemente reiniciando el símbolo del sistema lo resolvió. Parece que hubo un tiempo de ejecución JS en uno de esos caminos faltantes.

Godwin
fuente
También sucede que tiene eliminado algún camino de mi máquina Windows, ¿le mencionar lo hizo u añadió la ruta JS
Hussain Akhtar Wahid 'Ghouri'
@HussainAkhtarWahid, no sobrescribí mi autoexec ni nada por el estilo, así que todo lo que tenía que hacer era cerrar mi sesión de cmd y volver a abrirla.
Godwin
Bien hecho señor, este fue mi problema después de intentar configurar todo lo necesario para un entorno de desarrollo de rubí de Windows
HostMyBus
2

Me he arrancado el pelo con este error unas pocas veces. Me las he arreglado para que desaparezca en algún momento reiniciando Apache / Nginx.

Así que lo arreglé de la misma manera que arriba, agregando lo siguiente al archivo GEM:

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

y luego BORRÉ mi archivo gemfile.lock y luego volví a ejecutar "paquete de instalación". Descubrí que entonces "instalación de paquete" realmente instaló las bibliotecas correctas, etc.

LorneCurrie
fuente
1

En Ubuntu, tuve que hacerlo sudo apt-get updatey luego la instalación de nodejs funcionó.

kilombo1
fuente
1

cuando genero rails g controller obtuve el mismo error. Después de eso, cuando hago los siguientes cambios en Gemfile (en los rieles 4) todo salió bien. Los cambios que hice fueron

gem 'execjs'
gem 'therubyracer', "0.11.4"
Después de eso, puedo ejecutar el servidor y realizar todas las operaciones básicas en la aplicación.

Madhan Ayyasamy
fuente
0

agregue en su gemfile que está en la carpeta que ha creado: gem 'execjs' gem 'therubyracer'

Vishnu Harish
fuente
0

En mi caso, ejecutar el bundlecomando hizo el truco. Confío en que se encuentren entonces.

javabeangrinder
fuente
0

Tuve este problema al usar RubyMine (6.3.3). Un día intenté ejecutar mi código, pero no funcionó y me quejé de que no se encontró tiempo de ejecución de JavaScript. Sin rails sembargo, pude correr . La solución para mí fue crear una nueva configuración de ejecución. Parece realmente extraño que la configuración de Run se corrompa.

Jack
fuente