ExecJS :: RuntimeError у Windows, що намагається слідувати рубітуторіуму


103

ОНОВЛЕННЯ: Пропозиція Коліна про видалення рядка // = need_tree. виправили це питання.

Я витрачав дарма більше 2 днів, намагаючись дотримуватися будь-якої пропозиції та виправити свою проблему. Я намагаюся слідкувати за книжкою http://ruby.railstutorial.org на машині Windows, і не можу за все життя пройти наступну неприємну помилку.

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

Я намагався будь-яку пропозицію, включаючи встановлення nodejs з msi, використовуючи execjs 1.3.0 та інші речі, які я навіть більше не можу запам'ятати. Ось файл самоцвіту

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

і ось 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>

Ось контент контенту

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)

Я встановив Devkit і спробував різні дорогоцінні камені, але, будь ласка, підкажіть зміни, які можуть допомогти мені розвиватися у Windows. Я використовував rubyinstaller для всього.

Що я пропускаю?


5
Чи не могли б ви спробувати видалити рядок //= require_tree .з application.jsі подивитися , якщо НЕ вдається усунути помилки?
Colin R

WOW .... що зробив трюк ... велике спасибі Колін, видаливши лінію // = need_tree. виправили це питання. Я не можу пояснити, що таке полегшення, але чи можна у плз пояснити, чому ця лінія викликає помилку?
користувач1687078

3
Цей рядок компілює кожен .js.coffeeфайл у app/assets/javascriptsJavaScript, а потім додає його у ваш макет (але тільки в режимі розробки; у виробничому режимі складений js додається у ваш application.jsфайл). Не require_tree .повинно викликати помилок, тож якимось чином виникла проблема з одним із файлів, що додаються. Чи можете ви опублікувати список усіх файлів у вашому app/assets/javascriptsкаталозі? Крім того, ви можете спробувати повністю видалити вміст sessions.js.coffeeта додати назад //= require_tree .і побачити, чи помилка все ще існує.
Colin R

1
@ColinR, слід додати це як відповідь на запитання. У мене була така ж проблема, і якби я не переглянув коментарі, я б продовжував шукати інше питання.
Еммануель F

Відповіді:


242

Мій друг кілька місяців тому намагався підручник з Rails на програмі Win 8 RTM і зіткнувся з цією помилкою. Не впевнений, чи існує ця проблема і в Windows 7, але це може допомогти.

Параметри:

1) Видалення //= require_tree ./ ігнорування проблеми - Як вже було зазначено в ColinR, цей рядок не повинен викликати проблеми в першу чергу. Існує актуальна проблема, коли ExecJS працює належним чином із виконанням JavaScript у вашій системі, а видалення цього рядка просто ігнорує цей факт.

2) Встановлення Node.js / Втікання - Багато людей, здається, просто закінчують установку Node.js і використовують це замість виконання JavaScript вже у своїй системі. Хоча це допустимий варіант, він також потребує додаткового програмного забезпечення та уникає лише оригінальної проблеми, а це те, що ExecJS не працює належним чином із виконанням JavaScript вже у вашій системі. Якщо передбачається, що існуюча версія JavaScript у вашій системі працює, чому б не змусити її працювати замість встановлення додаткового програмного забезпечення? За словами творця ExecJS, час роботи, вже вбудований у Windows, насправді підтримується ...

ExecJS дозволяє запускати код JavaScript від Ruby. Він автоматично вибирає найкращий час виконання для оцінки вашої програми JavaScript, а потім повертає результат вам як об’єкт Ruby.

ExecJS підтримує такі умови виконання:

  • therubyracer - Google V8, вбудований в Ruby
  • therubyrhino - Мозілла носоріг, вбудований в JRuby
  • Node.js
  • Apple JavaScriptCore - в комплекті з Mac OS X
  • Хост сценарію Microsoft Windows (JScript)

(від github.com/sstephenson/execjs#execjs)

3) Фактично виправлення проблеми / Навчання - Використовуйте знання варіантів 1 та 2 для пошуку інших рішень. Я не можу сказати вам, скільки веб-сторінок я закрив, побачивши варіанти 1 або 2, було прийнятим рішенням, перш ніж знаходити інформацію про кореневу проблему, з якою ми мали. Єдиною причиною, яку ми шукали, було те, що ми не могли повірити команді Rails (1) вставити рядок коду у кожен проект, що генерується під скелею, який спричинив проблему, або (2) вимагати, щоб ми встановили додаткове програмне забезпечення просто для запуску цього за замовчуванням рядок коду. Тож ми врешті-решт знайшли вирішення нашої кореневої проблеми (ваші милі можуть відрізнятися).

Виправлення, яке працювало на нас: У системі, що має проблеми, знайдіть файл runtimes.rb ExecJS . Схоже , що це . Зробіть копію знайденого файлу для резервного копіювання. Відкрийте оригінальний runtimes.rb для редагування. Знайдіть розділ, який починається з рядка JScript = ExternalRuntime.new(. У цьому розділі на рядку, що містить :command => "cscript //E:jscript //Nologo //U",- видалити //Uєдине. Потім у рядку, що містить :encoding => 'UTF-16LE' # CScript with //U returns UTF-16LE- змінити UTF-16LE на UTF-8. Збережіть зміни у файлі. Цей розділ файлу тепер повинен читати:

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
)

Потім зупиніть, а потім перезапустіть сервер Rails та оновіть сторінку у своєму браузері, яка спричинила оригінальну помилку. Сподіваємось, зараз сторінка завантажується без помилок. Ось порядок випуску ExecJS, де ми спочатку розмістили результати: https://github.com/sstephenson/execjs/isissue/81#issuecomment-9892952

Якщо це не вирішило проблему, ви завжди можете замінити змінений runtimes.rb за допомогою резервної копії, яку ви зробили (сподіваємось), і все повернеться до прямої. У такому випадку розгляньте варіант 3 та продовжуйте пошук. Дайте нам знати, що врешті-решт працює для вас .. якщо тільки не буде видалення RequItree або встановлення node.js, цього вже багато. :)


20
Я б хотів, щоб я міг дати вам +50 голосів. Це занадто довго дратувало мене, намагаючись підняти therubyracer для Windows, зрозумівши, що це не підтримується, а потім намагається змусити ExecJS завантажуватися належним чином. Дякуємо, що знайшли час, щоб допомогти мені навчитися, а не заплутати проблему! Для тих, хто цікавиться, ви можете знайти місцезнаходження файлу runtimes.rb, набравши "gem who execjs"
Майкл

4
Мені довелося запустити інсталяцію пакету після внесення цієї зміни, щоб вона працювала. Тож якщо хтось спробує це рішення, і він, здається, спочатку не працює, переконайтеся, що ви спробуєте це! Я на Windows 8 64-бітний, і він працював на мене! Спасибі
Пітер Кірбі

2
+1 врятувало галас від встановлення вузла. Варіант 3 працює для Windows 8 64 біт
Самі,

10
Коментар на варіант 3: github.com/sstephenson/execjs/issues/111 каже , що ми можемо вирішити цю проблему тільки за рахунок зміни UTF-16LEв UTF-16без removig на //Uвибір. Я це підтвердив.
Цутому,

3
Я бачу багато, як, але не багато чому. Чому зміна того, що схоже на набір символів, має значення лише у Windows? Мені цікаво все.
НатанТемпельман

14

Був той самий випуск ОС - помилка Windows 8- 'ExecJS :: RuntimeError ...' Рішення відсутнє Node.js

  1. встановити Node.js з http://www.nodejs.org/download/
  2. Перезавантажте комп'ютер

1
цей працював на мене. Хтось тут знає, чому працювала установка node.js?
mpalencia

12

У мене виникла ця проблема, і я задирався в Інтернеті, я запускаю Windows 8 з цим файлом дорогоцінних каменів

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

Поїхав на http://nodejs.org/download/ встановлений - перезапустив машину і все працювало.


Я встановив вузол , як запропоновано, не потрібно перезавантаження, просто відкрийте нове вікно CMD (думаю , це так , що нові шляхи можуть бути доступні)
Will

5

Я віддав перевагу маршруту навчання . Здається, проблема випливає з цього

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

повернення порожнього рядка в execjs\external_runtine.rb(рядок 173 у версії 1.4.0). Ось чому повідомлення про помилку не містить тексту. Запропоновані зміни для мене не спрацювали. Я змінився UTF-16LEна UTF-8, але він все одно повернув порожню рядок. Я видалив \\Uіз цього command- це принаймні повернутий текст, але він був у неправильному кодуванні - у браузері він відображався як китайські символи.

Відповідно до цієї публікації в блозі MSDN , використання //Uпрапора та перенаправлення до файлу призводить cscriptдо повернення результату за допомогою UTF-16.

І тоді, магічно, це спрацювало ( @ #% $ & ^ @ $% !!!?!?!), Використовуючи commandяк "cscript //E:jscript //Nologo"і encodingяк "UTF-8". Що ж, добре.


4

Мені довелося додати свою папку nodejs до змінної середовища Windows Path. У Windows 8 відкрийте Панель управління, перейдіть до Система, Додаткові параметри системи (зліва), натисніть Змінні середовища зліва та відредагуйте змінну Шлях, щоб включити каталог у папку nodejs (можливо, у програмні файли).

Звичайно, у вас повинен бути встановлений Node.js (використовувати інсталятор Windows ) та встановити CoffeeScript через NPM.


4

Я знаю, що це дуже пізня відповідь на це питання, але я взявся за щось подібне і пішов повним шляхом, щоб зрозуміти, що насправді викликає проблему.

Виявилося, що двигун jscript Windows за замовчуванням все ще знаходиться на es3, і багато дорогоцінні камені використовують переваги функцій es5 або es6. На жаль, якщо це трапиться (ви використовуєте дорогоцінний камінь або фрагмент коду, який використовує функції es5 або es6), немає ніякого способу дозволити йому працювати у Windows із натиснутим двигуном js.

З цієї причини встановлення node.js вирішує проблему (вузол принаймні es5).

Сподіваюся, це може допомогти деяким людям, які борються з помилкою виконання jsexec.

Мої 2 копійки радять встановити вузол (дуже просто) або встановити v8, а не видаляти // = Requ_tree.

Примітка. Execjs автоматично використовуватиме вузол, якщо його виявлять. В іншому випадку примушуйте його використовувати, додаючи в завантажувач щось на кшталт:

ENV['EXECJS_RUNTIME'] = 'Node'

Щоб встановити env на вузол.


встановити вузол - це гарна ідея (і, мабуть, найпростіша), але все ще є дещо зайвим, враховуючи її розмір
prusswan

4

Для користувачів Windows це може працювати. Виникла проблема із запущеним у Windows вікном кави-скрипту> 1.9.0.

Здається, ви повинні додати це до свого gemfile:

gem 'кава-скрипт-джерело', '1.8.0'

то зробіть

пакет оновлення кави-скрипт-джерело

Я спробував усі перераховані вище варіанти, а також змішав декілька їх комбінацій, поки не знайшов цей Rails-4, ExecJS :: ProgramError на Сторінках # ласкаво просимо і зробив декілька оновлень дорогоцінних каменів і встановлення та оновлення пакетів.

Я відмінив усі свої випробування і погіршив джерело кави-сценарію, і воно працює. Опублікуйте тут, щоб допомогти іншим, у кого може виникнути подібне питання.

Оновлення файлів у постачальника / кеша

Кава-скрипт-джерело-1.8.0.gem Видалення застарілих файлів .gem з постачальника / кеша


Я спробував варіант 3 прийнятої відповіді, потім отримав "Помилка аргументу", спробував встановити nodejs, не допомогло, додав nodejs до змінних шляхів (я на Win10) і нарешті спробував ваш підхід. Працювали! Спасибі
лось

3

Для початківців, як я:

  1. Перейдіть до \ app \ views \ layouts \ application.html.erb
  2. Змінити рядок 6 з:

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

до

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

Джерело з підручника для виправлення тут


Шахта просто працює, коли я розміщую в обох рядках: <%= stylesheet_link_tag 'defaults', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_include_tag 'defaults', 'data-turbolinks-track': 'reload' %> дякую Леандро П.
rld

1
Будь ласка, не робіть цього. Він просто видалить весь Javascript у вашій програмі Rails. Це приховує проблему, але пізніше спричинить інших.
mattangriffel

Так, як говорить @mattangriffel, не робіть цього.
Ніл Аткінсон

2

Швидке і брудне рішення: видалити //= require_tree .зapplication.js .

Як я пояснюю в коментарях до цього питання, це насправді не вирішує основну проблему, яка викликає помилку, а просто уникає її.


Привіт Колін R, мені потрібна допомога. Що робити, якщо помилка трапляється у рядку 5, де лише видалення <% = stylesheet_link_tag 'застосунку', медіа: 'all', 'data-turbolinks-track' => true%> цей рядок коду усунув проблему. Але завантажувальна програма не стосується веб-сторінки. Навіть видалення * = Requ_tree. з application.css.sass не працює. У системі мого друга є Windows 32 32bit, nodejs не встановлений. Навіть запропонований вами метод 3 не працює. Я думаю, що в моєму випадку немає проблеми з js. Будь-яка ідея, як запобігти помилці?
учень

Я також встановив Node.js і шлях npm встановлюється в змінні середовища. Все ж така помилка. Я розробляю додаток в ОС Windows 8.1 64bit, і використовуються ті ж самоцвіти.
учень

2

Я використовував рішення №2, тому що раніше у мене була помилка, але в цьому відмінні не вийшло, тоді я додав

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

і біжи

bundle install

і моя проблема була виправлена


Якщо ви використовували рішення №2, після установки Node.js ви повинні перезавантажити всю лінію комітету у вітрах. Потім увімкніть сервер і повторіть спробу.
Юліем Алавез

1

Ось менш складне рішення для початківців:

Якщо ви просто працюєте через підручник, ви, ймовірно, працюєте з Gemfile за замовчуванням (або майже майже). Ви можете відкрити його в текстовому редакторі та видалити знак фунта з передньої частини цього рядка:

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

Вам потрібно буде повторно запустити bundle install , що, ймовірно, завантажить декілька речей. Але як тільки це станеться, ви зможете без проблем запустити сервер.

Принаймні, це працювало для мене.

Це, до речі, працює і на Ubuntu 12.04.



0

Ви змінили місцезнаходження свого коду з програми C: \ Users \ this-user \ yo-app ?

Коли я був молодий у рейках, я створив додаток, і місце мого додатка за замовчуванням було C: \ Users \ Duncan \ my-app, а потім, коли я змінив додаток і помістив його в D: \ All-my-Apps -папка я мала цю помилку ....

Я почухав голову, спробував 1,2,3 і більше ..... нічого! Поки я не повернув увесь код до розташування папок за замовчуванням і на моє здивування, я знову прокатувався :)

Якщо хтось може виявити це корисним (я не можу пояснити, чому це сталося, можливо, хтось може без спекуляцій)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.