ExecJS :: RuntimeError en Windows intentando seguir rubytutorial

103

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

He perdido más de 2 días tratando de seguir todas las sugerencias y solucionar mi problema. Estoy tratando de seguir el libro http://ruby.railstutorial.org en la máquina con Windows y no puedo por mi vida superar el siguiente error desagradable.

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: <head>
4:   <title><%= full_title(yield(:title)) %></title>
5:   <%= stylesheet_link_tag    "application", media: "all" %>
6:   <%= javascript_include_tag "application" %>
7:   <%= csrf_meta_tags %>
8:   <%= render 'layouts/shim' %>
9: </head>
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 probado todas las sugerencias, incluida la instalación de nodejs con msi, el uso de execjs 1.3.0 y otras cosas que ya no puedo recordar. Aquí está el archivo de gemas

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

<!DOCTYPE html>
 <html>
 <head>
   <title><%= full_title(yield(:title)) %></title>
   <%= stylesheet_link_tag    "application", media: "all" %>
   <%= javascript_include_tag "application" %>
   <%= csrf_meta_tags %>
   <%= render 'layouts/shim' %>
 </head>
 <body>
 <%= render 'layouts/header' %>
 <div class="container">
   <%= yield %>
   <%= render 'layouts/footer' %>
 </div>
 </body>
 </html>

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: <head>
    4:   <title><%= full_title(yield(:title)) %></title>
    5:   <%= stylesheet_link_tag    "application", media: "all" %>
    6:   <%= javascript_include_tag "application" %>
    7:   <%= csrf_meta_tags %>
    8:   <%= render 'layouts/shim' %>
    9: </head>
  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 gemas, pero sugiera cambios que puedan ayudarme a desarrollar en Windows. Usé rubyinstaller para todo.

¿Qué me estoy perdiendo?

user1687078
fuente
5
¿Podría intentar eliminar la línea //= require_tree .de application.jsy ver si el error persiste?
Colin R
WOW ... eso hizo el truco ... muchas gracias Colin, quitando la línea // = require_tree. ha solucionado el problema. No puedo explicar el alivio que es, pero ¿puede explicar por qué esa línea está causando el error?
user1687078
3
Esa línea compila cada .js.coffeearchivo en app/assets/javascriptsJavaScript y luego lo agrega a su diseño (pero solo en el modo de desarrollo; en el modo de producción, el js compilado se agrega a su application.jsarchivo). Tener require_tree .no debería estar causando errores, por lo que de alguna manera tiene un problema con uno de los archivos que se incluyen. ¿Puede publicar una lista de todos los archivos en su app/assets/javascriptsdirectorio? Además, puede intentar eliminar completamente el contenido sessions.js.coffeey volver a agregarlo //= require_tree .y ver si el error aún existe.
Colin R
1
@ColinR, debes agregar esto como respuesta a la pregunta. Tuve el mismo problema y si no hubiera examinado los comentarios, habría seguido buscando otra pregunta.
Emmanuel F

Respuestas:

242

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

Opciones:

1) Eliminar //= require_tree ./ ignorar el problema - como ColinR indicó anteriormente, esta línea no debería estar causando un problema en primer lugar. Existe un problema real con ExecJS funcionando 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 - Parece que muchas personas simplemente terminan instalando Node.js y usándolo en lugar del tiempo de ejecución de JavaScript 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 está funcionando correctamente con el tiempo de ejecución de JavaScript 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? Según el creador de ExecJS, el tiempo de ejecución ya integrado en Windows es de hecho compatible ...

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

ExecJS admite estos tiempos de ejecución:

  • therubyracer: Google V8 integrado en Ruby
  • therubyrhino - Mozilla Rhino integrado en JRuby
  • Node.js
  • Apple JavaScriptCore: incluido con Mac OS X
  • Host de secuencia de comandos de Microsoft Windows (JScript)

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

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

La solución que nos funcionó: si el sistema tiene problemas, busque el archivo runtimes.rb de ExecJS . Se parece a esto . Haga una copia del archivo encontrado para realizar una copia de seguridad. Abra el archivo 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 el //Uúnico. 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 ahora debería leer:

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 reinicie su servidor Rails y actualice la página en su navegador que produjo el error original. Es de esperar que la página se cargue sin errores ahora. Aquí está el hilo de problemas de ExecJS donde originalmente publicamos nuestros resultados: https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

Si esto no solucionó el problema, siempre puede sobrescribir el runtimes.rb modificado con la copia de seguridad que (con suerte) hizo y todo volverá al punto de partida. En ese caso, considere la opción 3 y siga buscando. Háganos saber lo que finalmente funciona para usted ... a menos que se elimine el require_tree o instale node.js, ya hay mucho de eso. :)

Kevin P
fuente
20
Ojalá pudiera darle +50 votos. Esto me ha estado molestando durante demasiado tiempo al intentar instalar therubyracer para Windows, darme cuenta de que no es compatible y luego intentar que ExecJS se cargue correctamente. ¡Gracias por tomarse el tiempo para ayudarme a aprender y no ofuscar el problema! Para aquellos que se preguntan, pueden obtener la ubicación del archivo runtimes.rb escribiendo "gem which execjs"
Michael
4
Tuve que ejecutar la instalación del paquete después de realizar este cambio para que funcione. Entonces, si alguien prueba esta solución y no parece funcionar al principio, ¡asegúrese de probarla! Estoy en Windows 8 de 64 bits, ¡y funcionó para mí! Gracias
Peter Kirby
2
+1 salvó el ajetreo de instalar node. La opción 3 me funciona en Windows 8 de 64 bits
Sami
10
Comente sobre la opción 3: github.com/sstephenson/execjs/issues/111 dice que podemos resolver el problema simplemente cambiando UTF-16LEa UTF-16sin eliminar la //Uopción. Yo lo confirmé.
Tsutomu
3
Veo mucho cómo, pero no mucho por qué. ¿Por qué cambiar lo que parece un conjunto de caracteres hace una diferencia solo en Windows? Tengo curiosidad, eso es todo.
NathanTempelman
14

Tuve 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
snassr
fuente
1
este funcionó para mí. ¿Alguien aquí sabe por qué funcionó la instalación de node.js?
mpalencia
12

Tuve este problema y estaba navegando por Internet.Estoy ejecutando Windows 8 con este archivo de gemas de rieles

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

Fui a http://nodejs.org/download/ instalado: reinicié la máquina y todo funcionó.

gustavoanalítica
fuente
Instalé el nodo como se sugirió, no necesité reiniciar, solo abrí una nueva ventana de cmd (supongo que esto es para que se pueda acceder a las nuevas rutas)
Será el
5

Preferí la ruta del aprendizaje . Parece que el problema proviene de

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

devolviendo 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-16LEa UTF-8, pero todavía devolvió una cadena vacía. Me quité \\Ude lacommand , al menos este texto devuelto, pero estaba en la codificación incorrecta, en el navegador se mostraba como caracteres chinos.

De acuerdo con esta publicación de blog de MSDN , usar la //Ubandera y redirigir a un archivo hace cscriptque se devuelva el resultado usandoUTF-16 .

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

cofiem
fuente
4

Tuve que agregar mi carpeta nodejs a mi variable de entorno Windows Path. 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 su carpeta nodejs (probablemente en Archivos de programa).

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

Evan
fuente
4

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

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

Esta es la razón por la que 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 de 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.

Tenga en cuenta que los execjs usarán automáticamente el nodo si se detectan. De lo contrario, fuerce su uso, agregando en el arranque algo como:

ENV['EXECJS_RUNTIME'] = 'Node'

Para configurar el env en node.

Dinuz
fuente
instalar el nodo es una buena idea (y probablemente la más simple), pero todavía es un poco exagerado considerando su tamaño
prusswan
4

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

Parece que tienes que agregar esto a tu archivo de gemas:

gema 'coffee-script-source', '1.8.0'

entonces hazlo

paquete actualización coffee-script-source

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

Revertí todas mis pruebas y bajé mi fuente de script de café y funciona. Publicar aquí para ayudar a cualquier otra persona que pueda tener un problema similar.

Actualización de archivos en proveedor / caché

coffee-script-source-1.8.0.gem Eliminando archivos .gem obsoletos de vendor / cache coffee-script-source-1.9.1.1.gem ¡Paquete actualizado!

DJSampat
fuente
Probé la opción 3 de la respuesta aceptada, luego obtuve un "Error de argumento", intenté instalar nodejs, no ayudó, agregué nodejs a las variables de ruta (estoy en Win10) y finalmente probé su enfoque. ¡Trabajó! Gracias
alce
3

Para principiantes como yo:

  1. Vaya a \ app \ views \ layouts \ application.html.erb
  2. Cambie la línea 6 de:

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

a

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

Fuente del tutorial para arreglar aquí

Leandro P.
fuente
La mina simplemente funciona cuando pongo ambas líneas: <%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %> gracias Leandro P.
rld
1
Por favor, no hagas esto. Simplemente eliminará todo el Javascript en su aplicación Rails. Esto oculta el problema, pero provocará otros más adelante.
mattangriffel
Sí, como dice @mattangriffel, no hagas esto.
Neil Atkinson
2

Solución rápida y sucia: quitar //= require_tree .de application.js.

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

Colin R
fuente
Hola Colin R, necesito ayuda. ¿Qué pasa si el error ocurre en la línea 5, donde solo al eliminar <% = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true%> esta línea de código solucionó el problema? Pero bootstrap no se aplica a la página web. Incluso eliminando * = require_tree. de application.css.sass no funciona. El sistema de mi amigo tiene Windows 7 de 32 bits, nodejs no está instalado. Incluso el método 3 sugerido por usted no funciona. Creo que no hay problema con js en mi caso. ¿Alguna idea de cómo evitar el error?
alumno
También instalé Node.js y la ruta de npm se establece en las variables de entorno. Sigue siendo el mismo error. Estoy desarrollando la aplicación en el sistema operativo Windows 8.1 de 64 bits y se utilizan las mismas gemas.
alumno
2

Usé la solución número 2 porque anteriormente tuve este error, pero en esta situación no funcionó, luego agregué el

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

y correr

bundle install

y mi problema fue solucionado

Yuliem Alavez
fuente
Si usó la solución número 2, debe volver a cargar todas las líneas de comando en windnows después de instalar Node.js. Luego encienda el servidor y vuelva a intentarlo.
Yuliem Alavez
1

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 almohadilla del frente de esta línea:

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

Deberá volver a ejecutarlo bundle install, lo que probablemente descargará algunas cosas. Pero una vez que lo haga, debería poder iniciar el servidor sin ningún problema.

Al menos, eso funcionó para mí.

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

Karl Giesing
fuente
0

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

Cuando era joven en rieles, 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 coloqué en D: \ All-my-Apps -carpeta tuve ese error ....

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

En caso de que alguien pueda encontrar esto útil (no puedo explicar por qué sucedió eso, tal vez alguien pueda sin especular)

dancun chiriga
fuente