ExecJS :: RuntimeError su Windows che tenta di seguire rubytutorial


103

AGGIORNAMENTO: il suggerimento di Colin di rimuovere la riga // = require_tree. ha risolto il problema.

Ho sprecato più di 2 giorni cercando di seguire ogni suggerimento disponibile e risolvere il mio problema. Sto cercando di seguire il libro http://ruby.railstutorial.org sulla macchina Windows e non posso superare il seguente brutto errore.

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

Ho provato tutti i suggerimenti, inclusa l'installazione di nodejs con msi, l'uso di execjs 1.3.0 e altre cose che non ricordo più. Ecco il file 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''

ed ecco il sessions.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>

Ecco il contenuto della console

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)

Ho installato Devkit e ho provato varie gemme, ma suggerisci modifiche che possono aiutarmi a sviluppare su Windows. Ho usato rubyinstaller per tutto.

Cosa mi sto perdendo?


5
Potresti provare a rimuovere la riga //= require_tree .da application.jse vedere se l'errore persiste?
Colin R

WOW ... ha funzionato ... grazie mille Colin, rimuovendo la riga // = require_tree. ha risolto il problema. Non posso spiegare che sollievo sia, ma puoi spiegare perché quella linea sta causando l'errore?
user1687078

3
Quella riga sta compilando ogni .js.coffeefile app/assets/javascriptsin JavaScript e quindi aggiungendolo al layout (ma solo in modalità di sviluppo; in modalità di produzione, il js compilato viene aggiunto al application.jsfile). Avere require_tree .non dovrebbe causare errori, quindi in qualche modo hai un problema con uno dei file inclusi. Puoi pubblicare un elenco di tutti i file nella tua app/assets/javascriptsdirectory? Inoltre, puoi provare a eliminare completamente il contenuto di sessions.js.coffeee ad aggiungerlo nuovamente //= require_tree .e vedere se l'errore persiste.
Colin R

1
@ColinR, dovresti aggiungerlo come risposta alla domanda. Ho avuto lo stesso problema e se non avessi sfogliato i commenti, avrei continuato a cercare un'altra domanda.
Emmanuel F

Risposte:


242

Il mio amico stava provando un tutorial su Rails su Win 8 RTM alcuni mesi fa e si è imbattuto in questo errore. Non sono sicuro che questo problema esista anche in Windows 7, ma potrebbe essere d'aiuto.

Opzioni:

1) Rimuovere //= require_tree ./ ignorare il problema: come indicato sopra da ColinR, questa linea non dovrebbe causare problemi in primo luogo. Esiste un problema reale con ExecJS che funziona correttamente con il runtime JavaScript sul tuo sistema e rimuovere questa riga significa semplicemente ignorare questo fatto.

2) Installazione di Node.js / Running away - Molte persone sembrano finire per installare Node.js e usarlo al posto del runtime JavaScript già sul loro sistema. Sebbene questa sia un'opzione valida, richiede anche software aggiuntivo ed evita solo il problema originale, ovvero che ExecJS non funziona correttamente con il runtime JavaScript già sul tuo sistema. Se il runtime JavaScript esistente sul tuo sistema dovrebbe funzionare, perché non farlo funzionare invece di installare altro software? Secondo il creatore di ExecJS, il runtime già integrato in Windows è infatti supportato ...

ExecJS ti consente di eseguire codice JavaScript da Ruby. Sceglie automaticamente il miglior runtime disponibile per valutare il tuo programma JavaScript, quindi ti restituisce il risultato come oggetto Ruby.

ExecJS supporta questi runtime:

  • therubyracer: Google V8 incorporato in Ruby
  • therubyrhino - Mozilla Rhino incorporato in JRuby
  • Node.js
  • Apple JavaScriptCore - Incluso con Mac OS X
  • Microsoft Windows Script Host (JScript)

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

3) Risolvere effettivamente il problema / Apprendimento: utilizzare la conoscenza delle opzioni 1 e 2 per cercare altre soluzioni. Non posso dirti quante pagine web ho chiuso vedendo che le opzioni 1 o 2 erano la soluzione accettata prima di trovare effettivamente informazioni sul problema principale che stavamo avendo. L'unico motivo per cui abbiamo continuato a cercare era che non potevamo credere che il team di Rails avrebbe (1) inserito una riga di codice in ogni progetto generato dallo scaffold che causava un problema, o (2) richiedendo l'installazione di software aggiuntivo solo per eseguire l'impostazione predefinita riga di codice. E così alla fine siamo arrivati ​​a una soluzione per il nostro problema di radice (le tue miglia possono variare).

The Fix che ha lavorato per noi: Sul sistema avendo problemi, trovare delle ExecJS runtimes.rb file. Sembra questo . Crea una copia del file trovato per il backup. Apri il file runtimes.rb originale per la modifica. Trova la sezione che inizia con la linea JScript = ExternalRuntime.new(. In quella sezione, nella riga contenente :command => "cscript //E:jscript //Nologo //U",- rimuovi l' //Uunico file. Quindi sulla riga contenente :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE- cambia UTF-16LE in UTF-8. Salva le modifiche al file. Questa sezione del file dovrebbe ora leggere:

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
)

Quindi, ferma e riavvia il tuo server Rails e aggiorna la pagina nel tuo browser che ha prodotto l'errore originale. Si spera che la pagina venga caricata senza errori ora. Ecco il thread del problema ExecJS in cui abbiamo pubblicato originariamente i nostri risultati: https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

Se questo non risolve il problema, puoi sempre sovrascrivere il file runtimes.rb modificato con la copia di backup che (si spera) hai fatto e tutto tornerà al punto di partenza. In tal caso, considera l'opzione 3 e continua a cercare. Facci sapere cosa alla fine funziona per te ... a meno che non rimuova require_tree o installi node.js, ce ne sono già molte in giro. :)


20
Vorrei poterti dare +50 voti. Questo mi ha infastidito per troppo tempo cercando di ottenere therubyracer per Windows, rendendomi conto che non è supportato, quindi cercando di caricare correttamente ExecJS. Grazie per aver dedicato del tempo per aiutarmi a imparare e non offuscare il problema! Per coloro che si chiedono, è possibile ottenere la posizione del file runtimes.rb digitando "gem which execjs"
Michael

4
Ho dovuto eseguire l'installazione del bundle dopo aver apportato questa modifica affinché funzionasse. Quindi, se qualcuno prova questa soluzione e all'inizio non sembra funzionare, assicurati di provarla! Sono su Windows 8 a 64 bit e ha funzionato per me! Grazie
Peter Kirby

2
+1 ha salvato il trambusto dall'installazione di node. L'opzione 3 funziona per me su Windows 8 64 bit
Sami

10
Commenta l'opzione 3: github.com/sstephenson/execjs/issues/111 dice che possiamo risolvere il problema semplicemente cambiando UTF-16LEin UTF-16senza removig l' //Uopzione. L'ho confermato.
Tsutomu

3
Sto vedendo molto come, ma non molto perché. Perché cambiare quello che sembra un set di caratteri fa la differenza solo su Windows? Sono curioso è tutto.
NathanTempelman

14

Aveva lo stesso problema OS - Errore di Windows 8 - "ExecJS :: RuntimeError ..." Soluzione - Node.js mancante

  1. installa Node.js da http://www.nodejs.org/download/
  2. Riavvia il computer

1
questo ha funzionato per me. Qualcuno qui sa perché l'installazione di node.js ha funzionato?
mpalencia

12

Ho avuto questo problema e stavo cercando Internet. Sto eseguendo Windows 8 con questo file gem di 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

Sono andato a http://nodejs.org/download/ installato - riavviato la macchina e tutto ha funzionato.


Ho installato il nodo come suggerito, non è stato necessario riavviare, è sufficiente aprire una nuova finestra di cmd (suppongo che sia così che sia possibile accedere ai nuovi percorsi)
Will

5

Ho preferito il percorso di apprendimento . Sembra che il problema derivi da

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

restituendo una stringa vuota in execjs\external_runtine.rb(riga 173 nella versione 1.4.0). Questo è il motivo per cui il messaggio di errore non contiene testo. Le modifiche suggerite non hanno funzionato per me. Sono passato UTF-16LEa UTF-8, ma ha comunque restituito una stringa vuota. Ho rimosso \\Udal command- questo almeno restituiva del testo, ma era nella codifica sbagliata - nel browser veniva visualizzato come caratteri cinesi.

Secondo questo post del blog MSDN , l'utilizzo del //Uflag e il reindirizzamento a un file causa la cscriptrestituzione del risultato utilizzando UTF-16.

E poi, magicamente, ha funzionato ( @ #% $ & ^ @ $% !!!?!?!) Usando commandas "cscript //E:jscript //Nologo"e encodingas "UTF-8". Oh bene.


4

Ho dovuto aggiungere la mia cartella nodejs alla mia variabile di ambiente Windows Path. In Windows 8 apri il Pannello di controllo, vai su Sistema, Impostazioni di sistema avanzate (a sinistra), fai clic su Variabili d'ambiente a sinistra e modifica la variabile Path per includere la directory nella tua cartella nodejs (probabilmente in Programmi).

Ovviamente devi avere installato Node.js (usa il programma di installazione di Windows ) e aver installato CoffeeScript tramite NPM.


4

So che questa è una risposta molto tardiva per questo problema, ma ho trovato qualcosa di simile e ho seguito il percorso completo per capire cosa stava realmente causando il problema.

Si è scoperto che il motore jscript di Windows predefinito è ancora su es3 e molte gemme stanno sfruttando le funzionalità di es5 o es6. Sfortunatamente se ciò accade (stai usando una gemma o un pezzo di codice che sfrutta le funzionalità es5 o es6), non c'è modo di farlo funzionare su Windows con il motore js nativo.

Questo è il motivo per cui l'installazione di node.js risolve il problema (il nodo è almeno es5).

Spero che questo possa aiutare alcune persone alle prese con un errore di runtime di jsexec.

Il mio consiglio di 2 centesimi è di installare il nodo (molto semplice) o installare la v8 e non rimuovere // = require_tree.

Nota execjs utilizzerà automaticamente node se rilevato. Altrimenti forzane l'uso, aggiungendo in boot qualcosa di simile:

ENV['EXECJS_RUNTIME'] = 'Node'

Per impostare env su node.


l'installazione di node è una buona idea (e probabilmente la più semplice), ma è ancora un po 'eccessiva considerando le sue dimensioni
prusswan

4

Per gli utenti Windows, questo potrebbe funzionare. C'è un problema con coffee-script-source> 1.9.0 in esecuzione su Windows.

Sembra che tu debba aggiungere questo al tuo gemfile:

gem "coffee-script-source", "1.8.0"

Quindi fa

aggiornamento bundle coffee-script-source

Ho provato tutte le opzioni di cui sopra e ho anche mischiato alcune combinazioni di esse, finché non ho trovato questo Rails-4, ExecJS :: ProgramError in Pages # benvenuto e avevo eseguito più aggiornamenti gem di sistema e installazioni e aggiornamenti in bundle.

Ho annullato tutte le mie prove e declassato la mia fonte di script per il caffè e funziona. Pubblicare qui per aiutare chiunque altro, che potrebbe avere un problema simile.

Aggiornamento dei file nel fornitore / cache

coffee-script-source-1.8.0.gem Rimozione di file .gem obsoleti dal fornitore / cache coffee-script-source-1.9.1.1.gem Bundle aggiornato!


Ho provato l'opzione 3 della risposta accettata, quindi ho ricevuto un "Errore di argomento", ho provato a installare nodejs, non ha aiutato, ho aggiunto nodejs alle variabili di percorso (sono su Win10) e infine ho provato il tuo approccio. Lavorato! Grazie
elk

3

Per principianti come me:

  1. Vai a \ app \ views \ layouts \ application.html.erb
  2. Cambia la riga 6 da:

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

per

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

Fonte dal tutorial da correggere qui


Il mio funziona solo quando inserisco entrambe le righe: <%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %> grazie a Leandro P.
rld

1
Per favore, non farlo. Rimuoverà semplicemente tutto il Javascript nella tua app Rails. Questo nasconde il problema ma ne causerà altri in seguito.
mattangriffel

Sì, come dice @mattangriffel, non farlo.
Neil Atkinson

2

Soluzione rapida e sporca: rimuovere //= require_tree .da application.js.

Come spiego nei commenti per la domanda, questo in realtà non risolve il problema sottostante che causa l'errore, ma semplicemente lo elude.


Ciao Colin R, ho bisogno di aiuto. Cosa succede se l'errore si verifica alla riga 5, dove solo la rimozione di <% = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true%> questa riga di codice ha risolto il problema. Ma bootstrap non si applica alla pagina web. Anche la rimozione di * = require_tree. da application.css.sass non funziona. Il sistema del mio amico ha Windows 7 a 32 bit, nodejs non è installato. Anche il metodo 3 suggerito da te non funziona. Penso che non ci siano problemi con js nel mio caso. Qualche idea su come prevenire l'errore?
studente

Ho anche installato Node.js e il percorso di npm è impostato nelle variabili d'ambiente. Sempre lo stesso errore. Sto sviluppando l'applicazione nel sistema operativo Windows 8.1 a 64 bit e vengono utilizzate le stesse gemme.
studente

2

Ho usato la soluzione numero 2 perché in precedenza avevo avuto questo errore, ma in questa situazione non funzionava, quindi ho aggiunto il file

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

e corri

bundle install

e il mio problema è stato risolto


Se hai utilizzato la soluzione numero 2, devi ricaricare tutta la riga di comando in windnows dopo aver installato Node.js. Quindi accendi il server e riprova.
Yuliem Alavez

1

Ecco una soluzione meno complicata, per i principianti:

Se stai solo lavorando al tutorial, probabilmente stai lavorando con il Gemfile predefinito (o quasi). Puoi aprirlo nel tuo editor di testo e rimuovere il segno di cancelletto dalla parte anteriore di questa riga:

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

Dovrai rieseguire bundle install, cosa che probabilmente scaricherà alcune cose. Ma una volta fatto, dovresti essere in grado di avviare il server senza alcun problema.

Almeno, per me ha funzionato.

A proposito, funziona anche su Ubuntu 12.04.



0

Hai cambiato la posizione del tuo codice da C: \ Users \ this-user \ yo-app ?

Quando ero giovane sui binari ho creato un'app e la posizione predefinita della mia app era C: \ Users \ Duncan \ my-app e poi, quando ho cambiato la mia-app e l'ho posizionata in D: \ All-my-Apps -cartella ho avuto quell'errore ....

Mi sono grattato la testa, ho provato 1,2,3 e altro ..... niente! Fino a quando non ho restituito tutto il codice alla posizione della cartella predefinita e con mio grande stupore, stavo rotolando di nuovo :)

Nel caso in cui qualcuno possa trovarlo utile (non posso spiegare perché sia ​​successo, forse qualcuno potrebbe senza speculazioni)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.