ExecJS :: RuntimeError w systemie Windows próbuje postępować zgodnie z rubytutorial

103

AKTUALIZACJA: sugestia Colina dotycząca usunięcia linii // = require_tree. rozwiązał problem.

Zmarnowałem ponad 2 dni, próbując zastosować się do każdej sugestii i naprawić mój problem. Próbuję śledzić książkę http://ruby.railstutorial.org na komputerze z systemem Windows i do końca życia nie mogę ominąć tego okropnego błędu.

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

Wypróbowałem każdą sugestię, w tym instalację nodejs z msi, użycie execjs 1.3.0 i innych rzeczy, których nawet nie pamiętam. Oto plik klejnotów

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

a tutaj jest session.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>

Oto zawartość konsoli

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)

Zainstalowałem Devkit i wypróbowałem różne perełki, ale proszę zasugeruj zmiany, które pomogą mi rozwijać się w systemie Windows. Do wszystkiego użyłem rubyinstaller.

czego mi brakuje?

user1687078
źródło
5
Czy możesz spróbować usunąć linię //= require_tree .z application.jsi sprawdzić, czy błąd nadal występuje?
Colin R,
WOW ... załatwiło sprawę ... wielkie dzięki Colin, usuwam linię // = require_tree. rozwiązał problem. Nie potrafię wyjaśnić, co to za ulga, ale czy u plz może wyjaśnić, dlaczego ta linia powoduje błąd?
user1687078
3
Ta linia kompiluje każdy .js.coffeeplik w app/assets/javascriptsJavaScript, a następnie dodaje go do układu (ale tylko w trybie programistycznym; w trybie produkcyjnym skompilowany application.jsplik js jest dodawany do pliku). Nie require_tree .powinno to powodować błędów, więc w jakiś sposób masz problem z jednym z dołączanych plików. Czy możesz opublikować listę wszystkich plików w swoim app/assets/javascriptskatalogu? Możesz także spróbować całkowicie usunąć zawartość sessions.js.coffeei dodać z powrotem //= require_tree .i sprawdzić, czy błąd nadal występuje.
Colin R,
1
@ColinR, powinieneś dodać to jako odpowiedź na pytanie. Miałem ten sam problem i gdybym nie przeglądał komentarzy, szukałbym dalej pytania.
Emmanuel F

Odpowiedzi:

242

Mój przyjaciel próbował samouczka Rails na Win 8 RTM kilka miesięcy temu i napotkał ten błąd. Nie jestem pewien, czy ten problem występuje również w systemie Windows 7, ale może to pomóc.

Opcje:

1) Usunięcie //= require_tree ./ zignorowanie problemu - Jak stwierdził ColinR powyżej, ten wiersz nie powinien powodować problemów. Występuje rzeczywisty problem z poprawnym działaniem ExecJS ze środowiskiem wykonawczym JavaScript w twoim systemie, a usunięcie tego wiersza jest po prostu ignorowaniem tego faktu.

2) Instalowanie Node.js / Ucieczka - wydaje się, że wiele osób po prostu instaluje Node.js i używa go zamiast środowiska wykonawczego JavaScript, które jest już w ich systemie. Chociaż jest to prawidłowa opcja, wymaga również dodatkowego oprogramowania i pozwala tylko uniknąć pierwotnego problemu, którym jest to, że ExecJS nie działa poprawnie ze środowiskiem wykonawczym JavaScript już zainstalowanym w systemie. Jeśli istniejące środowisko wykonawcze JavaScript w twoim systemie ma działać, dlaczego nie sprawić, by działało zamiast instalować więcej oprogramowania? Według twórcy ExecJS, środowisko uruchomieniowe już wbudowane w Windows jest w rzeczywistości obsługiwane ...

ExecJS umożliwia uruchamianie kodu JavaScript w języku Ruby. Automatycznie wybiera najlepsze dostępne środowisko wykonawcze do oceny programu JavaScript, a następnie zwraca wynik jako obiekt Rubiego.

ExecJS obsługuje następujące środowiska wykonawcze:

  • therubyracer - Google V8 osadzone w Rubim
  • therubyrhino - Mozilla Rhino osadzona w JRubym
  • Node.js
  • Apple JavaScriptCore - dołączony do systemu Mac OS X
  • Host skryptów systemu Microsoft Windows (JScript)

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

3) Rzeczywiste rozwiązanie problemu / nauka - skorzystaj z wiedzy o opcjach 1 i 2, aby znaleźć inne rozwiązania. Nie mogę powiedzieć, ile stron internetowych zamknąłem, widząc opcje 1 lub 2, które były akceptowanym rozwiązaniem przed znalezieniem informacji o głównym problemie, który mieliśmy. Jedynym powodem, dla którego szukaliśmy, było to, że nie mogliśmy uwierzyć, że zespół Railsów (1) wstawi wiersz kodu do każdego projektu generowanego przez szkielet, który spowodował problem, lub (2) wymagał zainstalowania dodatkowego oprogramowania tylko po to, aby uruchomić to domyślne linia kodu. I tak w końcu dotarliśmy do rozwiązania naszego problemu głównego (Twoje mile mogą się różnić).

Fix, który pracował dla nas: W systemie mającym problemy, znaleźć ExecJS męska runtimes.rb pliku. Wygląda jak ten . Wykonaj kopię znalezionego pliku w celu wykonania kopii zapasowej. Otwórz oryginalny plik runtimes.rb do edycji. Znajdź sekcję, która zaczyna się od linii JScript = ExternalRuntime.new(. W tej sekcji, w wierszu zawierającym :command => "cscript //E:jscript //Nologo //U",- usuń //Ujedyne. Następnie w wierszu zawierającym :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE- zmień UTF-16LE na UTF-8. Zapisz zmiany w pliku. Ta sekcja pliku powinna teraz brzmieć:

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
)

Następnie zatrzymaj i zrestartuj serwer Railsów i odśwież stronę w przeglądarce, która spowodowała pierwotny błąd. Miejmy nadzieję, że strona ładuje się teraz bez błędów. Oto wątek dotyczący problemu ExecJS, w którym pierwotnie opublikowaliśmy nasze wyniki: https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

Jeśli to nie rozwiąże problemu, zawsze możesz nadpisać zmodyfikowany plik runtimes.rb utworzoną (miejmy nadzieję) kopią zapasową i wszystko wróci do normy. W takim przypadku rozważ opcję 3 i kontynuuj wyszukiwanie. Daj nam znać, co ostatecznie zadziała w Twoim przypadku ... chyba, że ​​usunie to require_tree lub zainstaluje node.js, wiele tego już się dzieje. :)

Kevin P.
źródło
20
Chciałabym dać ci +50 głosów. Zbyt długo mnie to irytowało przy próbie uruchomienia narzędzia do oceny dla systemu Windows, zdając sobie sprawę, że nie jest obsługiwany, a następnie próbując załadować ExecJS. Dziękuję za poświęcenie czasu, aby pomóc mi się nauczyć i nie zaciemniać problemu! Dla tych, którzy się zastanawiają, możesz uzyskać lokalizację pliku runtimes.rb, wpisując „gem which execjs”
Michael
4
Musiałem uruchomić instalację pakietową po wprowadzeniu tej zmiany, aby działała. Jeśli więc ktoś spróbuje tego rozwiązania i na początku wydaje się nie działać, upewnij się, że spróbujesz! Używam 64-bitowego systemu Windows 8 i to zadziałało! Dzięki
Peter Kirby
2
+1 uratowało kłopoty z instalacją węzła. Opcja 3 działa dla mnie w systemie Windows 8 64 bit
Sami
10
Komentarz do opcji 3: github.com/sstephenson/execjs/issues/111 mówi, że możemy rozwiązać problem po prostu zmieniając opcję UTF-16LEna UTF-16bez usuwania tej //Uopcji. Potwierdziłem to.
Tsutomu,
3
Widzę wiele, jak, ale nie wiele dlaczego. Dlaczego zmiana tego, co wygląda jak zestaw znaków, ma znaczenie tylko w systemie Windows? Jestem ciekawy to wszystko.
NathanTempelman
14

Wystąpił ten sam problem System operacyjny - błąd Windows 8 - rozwiązanie „ExecJS :: RuntimeError ...” - brak Node.js

  1. zainstaluj Node.js z http://www.nodejs.org/download/
  2. Zrestartuj komputer
snassr
źródło
1
ten pracował dla mnie. Czy ktoś tutaj wie, dlaczego instalacja node.js zadziałała?
mpalencia
12

Miałem ten problem i przeglądałem internet. Używam Windows 8 z tym plikiem gem 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

Poszedłem do http://nodejs.org/download/ zainstalowany - zrestartowałem maszynę i wszystko działało.

gustavoanalytics
źródło
Zainstalowałem węzeł zgodnie z sugestią, nie musiałem ponownie uruchamiać, po prostu otwórz nowe okno cmd (domyślam się, że jest tak, aby można było uzyskać dostęp do nowych ścieżek)
Czy
5

Wolałem ścieżkę uczenia się . Wygląda na to, że problem wynika z

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

zwracanie pustego ciągu w execjs\external_runtine.rb(wiersz 173 w wersji 1.4.0). Dlatego komunikat o błędzie nie zawiera tekstu. Sugerowane zmiany nie zadziałały dla mnie. Zmieniłem UTF-16LEna UTF-8, ale nadal zwracał pusty ciąg. Usunąłem \\Uz command- przynajmniej ten zwrócony tekst, ale był w złym kodowaniu - w przeglądarce wyświetlał się jako chińskie znaki.

Zgodnie z tym wpisem na blogu MSDN użycie //Uflagi i przekierowanie do pliku powoduje cscriptzwrócenie wyniku przy użyciu UTF-16.

A potem magicznie zadziałało ( @ #% $ & ^ @ $% !!!?!?!) Używając commandas "cscript //E:jscript //Nologo"i encodingas "UTF-8". No cóż.

cofiem
źródło
4

Musiałem dodać folder nodejs do mojej zmiennej środowiskowej Windows Path. W Windows 8 otwórz Panel sterowania, przejdź do System, Zaawansowane ustawienia systemu (po lewej), kliknij Zmienne środowiskowe po lewej stronie i edytuj zmienną Path, aby uwzględnić katalog do folderu nodejs (prawdopodobnie w Program Files).

Oczywiście musisz mieć zainstalowany Node.js (użyj instalatora Windows ) oraz CoffeeScript przez NPM.

Evan
źródło
4

Wiem, że to bardzo późna odpowiedź na ten problem, ale doszedłem do czegoś podobnego i poszedłem pełną ścieżką, aby zrozumieć, co tak naprawdę jest przyczyną problemu.

Okazało się, że domyślny silnik jscript systemu Windows nadal działa na es3, a wiele klejnotów korzysta z funkcji es5 lub es6. Niestety, jeśli tak się stanie (używasz klejnotu lub fragmentu kodu, który wykorzystuje funkcje es5 lub es6), nie ma możliwości, aby działał w systemie Windows z natywnym silnikiem js.

To jest powód, dla którego instalacja node.js rozwiązuje problem (węzeł to co najmniej es5).

Mam nadzieję, że może to pomóc niektórym ludziom borykającym się z błędem wykonania jsexec.

Moje 2 centy radzę zainstalować node (bardzo łatwe) lub zainstalować v8 i nie usuwać // = require_tree.

Uwaga: pliki execj automatycznie użyją węzła, jeśli zostaną wykryte. W przeciwnym razie wymuś jego użycie, dodając do bootowania coś takiego:

ENV['EXECJS_RUNTIME'] = 'Node'

Aby ustawić env na node.

Dinuz
źródło
instalacja węzła to dobry pomysł (i prawdopodobnie najprostszy), ale nadal jest to trochę przesada, biorąc pod uwagę jego rozmiar
prusswan
4

W przypadku użytkowników systemu Windows może to działać. Wystąpił problem z coffee-script-source> 1.9.0 uruchomionym w systemie Windows.

Wygląda na to, że musisz dodać to do swojego pliku gem:

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

to zrób

aktualizacja pakietu coffee-script-source

Wypróbowałem wszystkie powyższe opcje, a także pomieszałem kilka ich kombinacji, aż znalazłem ten Rails-4, ExecJS :: ProgramError w Pages # welcome i zrobiłem wiele aktualizacji systemowych klejnotów oraz instalacje i aktualizacje pakietów.

Cofnąłem wszystkie moje próby i obniżyłem moje źródło skryptu kawy i działa. Publikowanie tutaj, aby pomóc każdemu, kto może mieć podobny problem.

Aktualizowanie plików w dostawcy / pamięci podręcznej

coffee-script-source-1.8.0.gem Usuwanie nieaktualnych plików .gem z dostawcy / pamięci podręcznej coffee-script-source-1.9.1.1.gem Zaktualizowany pakiet!

DJSampat
źródło
Wypróbowałem opcję 3 zaakceptowanej odpowiedzi, potem otrzymałem "Błąd argumentu", spróbowałem zainstalować nodejs, nie pomogłem, dodałem nodejs do zmiennych ścieżki (jestem na Win10) i wreszcie wypróbowałem twoje podejście. Pracowałem! Dzięki
łoś
3

Dla początkujących takich jak ja:

  1. Przejdź do \ app \ views \ layouts \ application.html.erb
  2. Zmień wiersz 6 z:

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

do

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

Źródło z samouczka do naprawienia tutaj

Leandro P.
źródło
Kopalnia po prostu działa, gdy wstawię obie linie: <%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %> dzięki Leandro P.
rld
1
Proszę, nie rób tego. Po prostu usunie cały JavaScript z twojej aplikacji Rails. To ukrywa problem, ale spowoduje to później.
mattangriffel
Tak, jak mówi @mattangriffel, nie rób tego.
Neil Atkinson
2

Szybkie i brudne rozwiązanie: usuń //= require_tree .z application.js.

Jak wyjaśniam w komentarzach do pytania, w rzeczywistości nie rozwiązuje to podstawowego problemu, który powoduje błąd, ale po prostu go omija.

Colin R.
źródło
Cześć Colin R, potrzebuję pomocy. Co się stanie, jeśli błąd wystąpi w linii 5, gdzie tylko usunięcie <% = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true%> rozwiązało problem. Ale bootstrap nie ma zastosowania do strony internetowej. Nawet usuwanie * = require_tree. z application.css.sass nie działa. System mojego przyjaciela ma Windows 7 32-bitowy, nodejs nie jest zainstalowany. Nawet metoda 3 sugerowana przez ciebie nie działa. Myślę, że w moim przypadku nie ma problemu z js. Masz jakiś pomysł, jak zapobiec błędowi?
uczeń
Zainstalowałem również Node.js, a ścieżka npm jest ustawiona w zmiennych środowiskowych. Wciąż ten sam błąd. Rozwijam aplikację w systemie Windows 8.1 64-bitowym i używam tych samych perełek.
uczeń
2

Użyłem rozwiązania numer 2 ponieważ wcześniej miałem ten błąd, ale w tej lokalizacji nie działało to dodałem

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

i biegnij

bundle install

i mój problem został rozwiązany

Yuliem Alavez
źródło
Jeśli użyłeś rozwiązania numer 2, musisz ponownie załadować wszystkie linie komend w oknach po zainstalowaniu Node.js. Następnie włącz serwer i spróbuj ponownie.
Yuliem Alavez
1

Oto mniej skomplikowane rozwiązanie dla początkujących:

Jeśli dopiero pracujesz nad samouczkiem, prawdopodobnie pracujesz z domyślnym plikiem Gemfile (lub prawie). Możesz go otworzyć w edytorze tekstu i usunąć znak funta z początku tego wiersza:

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

Będziesz musiał ponownie uruchomić bundle install, co prawdopodobnie spowoduje pobranie kilku rzeczy. Ale kiedy to nastąpi, powinieneś być w stanie uruchomić serwer bez żadnego problemu.

Przynajmniej to zadziałało dla mnie.

Nawiasem mówiąc, działa to również na Ubuntu 12.04.

Karl Giesing
źródło
0

Czy zmieniłeś lokalizację swojego kodu z C: \ Users \ this-user \ yo-app ?

Kiedy byłem młody w Railsach, utworzyłem aplikację i domyślną lokalizacją mojej aplikacji było C: \ Users \ Duncan \ my-app, a potem, kiedy zmieniłem moją-aplikację i umieściłem ją w D: \ All-my-Apps -folder miałem ten błąd ....

Podrapałem się w głowę, spróbowałem 1,2,3 i więcej ..... nic! Dopóki nie wróciłem całego kodu do domyślnej lokalizacji folderu i ku mojemu zdziwieniu znowu się toczyłem :)

Na wypadek, gdyby ktoś uznał to za przydatne (nie potrafię wyjaśnić, dlaczego tak się stało, może ktoś może bez spekulacji)

dancun chiriga
źródło