ExecJS :: RuntimeError en Windows tratando de seguir rubytutorial

ACTUALIZACIÓN: sugerencia de Colin de eliminar la línea // = require_tree. ha arreglado el problema

He perdido más de 2 días tratando de seguir cada sugerencia y solucionar mi problema. Intento seguir el libro de http://ruby.railstutorial.org en la máquina de Windows y no puedo pasar el siguiente desagradable error.

ExecJS::RuntimeError in Static_pages#home Showing C:/Users/.../bootcamp-sample-app/app/views/layouts/application.html.erb where line #6 raised: ["ok","(function() {\n\n\n\n}).call(this);\n"] (in C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee) Extracted source (around line #6): 3:  4:  5:  6:  7:  8:  9:  Rails.root: C:/Users/.../bootcamp-sample-app Application Trace | Framework Trace | Full Trace app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___487732698_30422172' Request 

He intentado todas las sugerencias, incluida la instalación de nodejs con el msi, el uso de execjs 1.3.0 y otras cosas que ni siquiera puedo recordar. Aquí está el archivo gem

 source 'https://rubygems.org' gem 'rails', '3.2.8' gem 'bootstrap-sass', '2.0.0' gem 'bcrypt-ruby', '3.0.1' gem 'faker', '1.0.1' gem 'will_paginate', '3.0.3' gem 'bootstrap-will_paginate', '0.0.6' group :development, :test do gem 'sqlite3', '1.3.5' gem 'rspec-rails', '2.10.0' gem 'guard-rspec', '0.5.5' gem 'guard-cucumber' end group :development do gem 'annotate', '2.5.0' end # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails' gem 'coffee-rails' gem 'coffee-script' gem 'uglifier' end gem 'jquery-rails', '2.0.2' gem 'execjs' # Gems on Linus/Mac #gem 'therubyracer' group :test do gem 'capybara', '1.1.2' gem 'guard-spork', '0.3.2' gem 'spork', '0.9.0' gem 'factory_girl_rails', '1.4.0' gem 'cucumber-rails', '1.2.1', require: false gem 'database_cleaner', '0.7.0' # Test gems on Linux # gem 'rb-inotify', '0.8.8' # gem 'libnotify', '0.5.9' # Test gems on Macintosh OS X # gem 'selenium-webdriver', '~> 2.22.0' # gem 'rb-fsevent', '0.9.1', :require => false # gem 'growl', '1.0.3' # Test gems on Windows # gem 'rb-fchange', '0.0.5' # gem 'rb-notifu', '0.0.4' # gem 'win32console', '1.3.0' end group :production do # gem 'therubyracer' gem 'pg', '0.12.2' end # To use ActiveModel has_secure_password # gem 'bcrypt-ruby', '~> 3.0.0' # To use Jbuilder templates for JSON # gem 'jbuilder' # Use unicorn as the app server # gem 'unicorn' # Deploy with Capistrano # gem 'capistrano' # To use debugger #gem 'debugger'' 

y aquí están las sesiones.js.coffee

 # Place all the behaviors and hooks related to the matching controller here. # All this logic will automatically be available in application.js. # You can use CoffeeScript in this file: http://jashkenas.github.com/coffee-script/ 

application.js

 // This is a manifest file that'll be compiled into application.js, which will include all the files // listed below. // // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts, // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path. // // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the // the compiled file. // // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD // GO AFTER THE REQUIRES BELOW. // //= require jquery //= require jquery_ujs //= require_tree . //= require bootstrap 

application.html.erb

            

Aquí está el contenido de la consola

 Processing by StaticPagesController#home as HTML Rendered static_pages/home.html.erb within layouts/application (45.0ms) Completed 500 Internal Server Error in 1136ms ActionView::Template::Error (["ok","(function() {\n\n\n\n}).call(this);\n"] (in C:/Users/.../bootcamp-sample-app/app/assets/javascripts/sessions.js.coffee)): 3:  4:  5:  6:  7:  8:  9:  app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___487732698_30422172' Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.0ms) Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms) Rendered C:/RailsInstaller/Ruby1.9.3/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (34.0ms) 

He instalado Devkit y he probado varias gems, pero sugiero cambios que pueden ayudarme a desarrollar en Windows. Utilicé Rubyinstaller para todo.

¿Qué me estoy perdiendo?

Mi amigo estaba intentando un tutorial de Rails en Win 8 RTM hace unos meses y se encontró con este error. No estoy seguro de si este problema existe en Windows 7 también, pero esto puede ayudar.

Opciones:

1) Eliminar //= require_tree . / Ignorando el problema – Como dijo ColinR anteriormente, esta línea no debería estar causando un problema en primer lugar. Existe un problema real con ExecJS que funciona correctamente con el tiempo de ejecución de JavaScript en su sistema y eliminar esta línea es simplemente ignorar ese hecho.

2) Instalando Node.js / Huyendo – Mucha gente parece terminar instalando Node.js y usándolo en lugar del JavaScript en tiempo de ejecución que ya está en su sistema. Si bien esa es una opción válida, también requiere software adicional y solo evita el problema original, que es que ExecJS no funciona correctamente con el tiempo de ejecución de JavaScript que ya está en su sistema. Si se supone que el tiempo de ejecución de JavaScript existente en su sistema funciona, ¿por qué no hacerlo funcionar en lugar de instalar más software? De acuerdo con el creador de ExecJS, el tiempo de ejecución ya integrado en Windows es de hecho compatible …

ExecJS le permite ejecutar código JavaScript de Ruby. Selecciona automáticamente el mejor tiempo de ejecución disponible para evaluar su progtwig de JavaScript y luego le devuelve el resultado como un objeto de Ruby.

ExecJS es compatible con estos tiempos de ejecución:

  • therubyracer – Google V8 incrustado en Ruby
  • therubyrhino – Mozilla Rhino incrustado en JRuby
  • Node.js
  • JavaScript JavaScript de Apple: incluido con Mac OS X
  • Microsoft Windows Script Host (JScript)

(desde github.com/sstephenson/execjs#execjs)

3) En realidad solucionando el problema / Aprendizaje: utilice el conocimiento de las opciones 1 y 2 para buscar otras soluciones. No puedo decirte cuántas páginas web cerré al ver las opciones 1 o 2 fue la solución aceptada antes de encontrar realmente información sobre el problema raíz que estábamos teniendo. La única razón por la que seguimos buscando fue porque no podíamos creer que el equipo Rails (1) insertara una línea de código en cada proyecto generado por el andamio que causó un problema, o (2) requiere que instalemos software adicional solo para ejecutar ese valor predeterminado línea de código. Y finalmente llegamos a una solución para nuestro problema raíz (sus millas pueden variar).

La solución que funcionó para nosotros: en el sistema que tiene problemas, busque el archivo runtimes.rb de ExecJS. Se ve así. Haga una copia del archivo encontrado para la copia de seguridad. Abra el runtimes.rb original para editarlo. Busque la sección que comienza con la línea JScript = ExternalRuntime.new( . En esa sección, en la línea que contiene :command => "cscript //E:jscript //Nologo //U", – elimine //U solo //U Luego, en la línea que contiene :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE – cambie UTF-16LE a UTF-8 . Guarde los cambios en el archivo. Esta sección del archivo debería leer ahora:

 JScript = ExternalRuntime.new( :name => "JScript", :command => "cscript //E:jscript //Nologo", :runner_path => ExecJS.root + "/support/jscript_runner.js", :encoding => 'UTF-8' # CScript with //U returns UTF-16LE ) 

A continuación, deténgase y luego reinicie su servidor Rails y actualice la página en su navegador que produjo el error original. Esperemos que la página se cargue sin errores ahora. Aquí está el hilo de la cuestión ExecJS donde originalmente publicamos nuestros resultados: https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

Si esto no solucionó el problema, siempre puede sobrescribir los runtimes.rb modificados con la copia de seguridad que (afortunadamente) haya realizado y todo volverá a ser el primero. En ese caso, considere la opción 3 y continúe buscando. Háganos saber lo que eventualmente funciona para usted … a menos que esté eliminando require_tree o instalando node.js, ya hay mucho de eso dando vueltas. 🙂

Tenía el mismo problema OS- Error de Windows 8- ‘ExecJS :: RuntimeError …’ Solución- Falta Node.js

  1. instale Node.js desde http://www.nodejs.org/download/
  2. Reinicia la computadora

Tuve este problema y acerté en Internet. Estoy ejecutando Windows 8 con este archivo de gems de Rails.

 source 'https://rubygems.org' gem 'rails', '3.2.9' # Bundle edge Rails instead: # gem 'rails', :git => 'git://github.com/rails/rails.git' group :development do gem 'sqlite3', '1.3.5' end # Gems used only for assets and not required # in production environments by default. group :assets do gem 'sass-rails', '3.2.5' gem 'coffee-rails', '3.2.2' gem 'uglifier', '1.2.3' end gem 'jquery-rails', '2.0.2' group :production do gem 'pg', '0.12.2' end 

Fuimos a http://nodejs.org/download/ installed – reinicié la máquina y todo funcionó.

Yo favorecía la ruta de Aprendizaje . Parece que el problema proviene de

 IO.popen(command, options) { |f| output = f.read } 

devolver una cadena vacía en execjs\external_runtine.rb (línea 173 en la versión 1.4.0). Es por eso que el mensaje de error no contiene texto. Los cambios sugeridos no funcionaron para mí. Cambié UTF-16LE a UTF-8 , pero todavía devolvió una cadena vacía. Quité \\U del command , que al menos devolvía el texto, pero tenía una encoding incorrecta, en el navegador que mostraba como caracteres chinos.

De acuerdo con esta publicación de blog de MSDN , el uso de la bandera //U y la redirección a un archivo hace que cscript devuelva el resultado usando UTF-16 .

Y luego, mágicamente, funcionó ( @ #% $ & ^ @ $% !!!?!?!) Usando el command como "cscript //E:jscript //Nologo" y encoding como "UTF-8" . Oh bien.

Tuve que agregar mi carpeta nodejs a mi variable de entorno de ruta de Windows. En Windows 8 abra el Panel de control, vaya a Sistema, Configuración avanzada del sistema (a la izquierda), haga clic en Variables de entorno a la izquierda y edite la variable Ruta para incluir el directorio en la carpeta de su nodo (probablemente en Archivos de progtwig).

Por supuesto, debe tener Node.js instalado (use el instalador de Windows ) y haya instalado CoffeeScript a través de NPM.

Sé que esta es una respuesta muy tardía para este problema, pero obtuve algo similar y seguí el camino completo para comprender lo que realmente estaba causando el problema.

Resultó que el motor predeterminado de jscript de Windows todavía está en es3, y muchas gems están aprovechando las características de es5 o es6. Desafortunadamente, si esto sucede (está utilizando una gem o un código que aprovecha las características de es5 o es6), no hay forma de que funcione en Windows con el motor nativo js.

Esta es la razón por la cual la instalación de node.js resuelve el problema (el nodo es al menos es5).

Espero que esto pueda ayudar a algunas personas que luchan con un error en el tiempo de ejecución de jsexec.

Mi consejo de 2 centavos es instalar el nodo (muy fácil) o instalar v8, y no eliminar el // = require_tree.

Note execjs usará automáticamente el nodo si se detecta. De lo contrario, forzar su uso, agregando en el arranque algo como:

 ENV['EXECJS_RUNTIME'] = 'Node' 

Para establecer el env al nodo.

Para los usuarios de Windows, esto puede funcionar. Hay un problema con coffee-script-source> 1.9.0 ejecutándose en Windows.

Parece que debes agregar esto a tu gemfile:

gem ‘coffee-script-source’, ‘1.8.0’

entonces hazlo

actualización del paquete coffee-script-source

Probé todas las opciones anteriores, y también mezclé algunas de ellas, hasta que encontré este Rails-4, ExecJS :: ProgramError en Pages # welcome y había realizado múltiples actualizaciones de gems del sistema y paquetes de instalaciones y actualizaciones.

Revertí todas mis pruebas y degradé mi fuente de script de café y funciona. Publicación aquí para ayudar a cualquier otra persona que tenga un problema similar.

Actualización de archivos en el proveedor / caché

coffee-script-source-1.8.0.gem Eliminación de archivos .gem obsoletos del proveedor / caché coffee-script-source-1.9.1.1.gem ¡Paquete actualizado!

Para principiantes como yo:

  1. Navegue a \ app \ views \ layouts \ application.html.erb
  2. Cambiar la línea 6 desde:

    ‘<% = javascript_include_tag' aplicación ',' data-turbolinks-track '=> true%>’

a

 <%= javascript_include_tag 'defaults', 'data-turbolinks-track' => true %> 

Fuente del tutorial para corregirlo aquí

Solución rápida y sucia: eliminar //= require_tree . desde application.js .

Como explico en los comentarios a la pregunta, esto en realidad no resuelve el problema subyacente que está causando el error, sino que simplemente lo evita.

Usé la solución número 2 porque anteriormente tenía este error, pero en este caso no funcionó, luego agregué el

gem 'coffee-script-source', '1.8.0'

y correr

 bundle install 

y mi problema fue arreglado

Aquí hay una solución menos complicada, para principiantes:

Si solo está trabajando en el tutorial, probablemente esté trabajando con el Gemfile predeterminado (o casi). Puede abrirlo en su editor de texto y eliminar el signo de libra desde el frente de esta línea:

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

Tendrá que volver a ejecutar la bundle install , que probablemente descargue algunas cosas. Pero una vez que lo hace, debe poder iniciar el servidor sin ningún problema.

Al menos, eso funcionó para mí.

Esto también funciona en Ubuntu 12.04, por cierto.

Ejecutando Win 8 Rails de 64 bits 4.2.5 ruby ​​2.1.7

Este funcionó para mí

¿Cambió la ubicación de su código de C: \ Users \ this-user \ yo-app ?

Cuando era joven en los carriles, creé una aplicación y la ubicación predeterminada de mi aplicación era C: \ Users \ Duncan \ my-app y luego, cuando cambié mi aplicación y la colocaba en D: \ All-my-Apps -carpeta tuve ese error …

Me rasqué la cabeza, intenté 1,2,3 y más … ¡nada! Hasta que devolví todo el código a la ubicación predeterminada de la carpeta y para mi sorpresa, estaba rodando de nuevo 🙂

En caso de que alguien lo encuentre útil (no puedo explicar por qué sucedió eso, tal vez alguien pueda hacerlo sin especulaciones)