ExecJS :: RuntimeError в Windows пытается следовать rubytutorial

103

ОБНОВЛЕНИЕ: предложение Колина об удалении строки // = require_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''

а вот файл 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>

Вот содержимое консоли

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.

Что мне не хватает?

user1687078
источник
5
Не могли бы вы попробовать удалить строку //= require_tree .из application.jsи посмотреть , если не удается устранить ошибки?
Colin R
ВАУ .... это помогло ... большое спасибо, Колин, убрав строку // = require_tree. исправил проблему. Я не могу объяснить, какое это облегчение, но могу ли вы объяснить, почему эта строка вызывает ошибку?
user1687078
3
Эта строка компилирует каждый .js.coffeeфайл в app/assets/javascriptsJavaScript, а затем добавляет его в ваш макет (но только в режиме разработки; в производственном режиме скомпилированный js добавляется в ваш application.jsфайл). Наличие require_tree .не должно вызывать ошибок, значит, у вас почему-то проблема с одним из включаемых файлов. Можете ли вы опубликовать список всех файлов в вашем app/assets/javascriptsкаталоге? Кроме того, вы можете попробовать полностью удалить содержимое sessions.js.coffeeи добавить обратно //= require_tree .и посмотреть, сохраняется ли ошибка.
Colin R
1
@ColinR, вы должны добавить это как ответ на вопрос. У меня была такая же проблема, и если бы я не просматривал комментарии, я бы продолжил поиск другого вопроса.
Emmanuel 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 - Mozilla Rhino, встроенный в JRuby
  • Node.js
  • Apple JavaScriptCore - входит в состав Mac OS X
  • Хост сценариев Microsoft Windows (JScript)

(из github.com/sstephenson/execjs#execjs)

3) Фактическое решение проблемы / обучение - Используйте знания вариантов 1 и 2 для поиска других решений. Я не могу сказать вам, сколько веб-страниц, которые я закрыл, увидев варианты 1 или 2, были принятым решением, прежде чем фактически нашел информацию о основной проблеме, с которой мы столкнулись. Единственная причина, по которой мы продолжали искать, заключалась в том, что мы не могли поверить, что команда Rails (1) вставит строку кода в каждый сгенерированный с помощью скаффолда проект, который вызвал проблему, или (2) потребует, чтобы мы установили дополнительное программное обеспечение только для запуска этого значения по умолчанию. строка кода. И вот, в конце концов, мы пришли к решению нашей основной проблемы (количество миль может отличаться).

Фикс , который работал на нас: О системе возникла проблемы, найти ExecJS игрового runtimes.rb файл. Это похоже на это . Сделайте копию найденного файла для резервного копирования. Откройте исходный файл 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/issues/81#issuecomment-9892952

Если это не устранило проблему, вы всегда можете перезаписать измененный runtimes.rb созданной вами (надеюсь) резервной копией, и все вернется к исходному состоянию. В этом случае рассмотрите вариант 3 и продолжайте поиск. Сообщите нам, что в конечном итоге сработает для вас ... если это не удаление require_tree или установка node.js, этого уже много. :)

Кевин П.
источник
20
Хотел бы я дать вам +50 голосов. Меня это слишком долго раздражало, когда я пытался запустить therubyracer для Windows, понимая, что он не поддерживается, а затем пытался заставить ExecJS загрузиться должным образом. Спасибо, что нашли время, чтобы помочь мне изучить проблему и не скрывать ее! Для тех, кому интересно, вы можете узнать расположение файла runtimes.rb, набрав «gem which execjs»
Майкл
4
Мне пришлось запустить установку пакета после внесения этого изменения, чтобы он работал. Так что, если кто-то попробует это решение, и сначала оно не сработает, обязательно попробуйте это! Я использую 64-разрядную версию Windows 8, и у меня это сработало! Спасибо
Питер Кирби
2
+1 избавил от ажиотажа с установкой ноды. Вариант 3 работает для меня на Windows 8 64 бит
Сами
10
Комментарий к варианту 3: github.com/sstephenson/execjs/issues/111 говорит, что мы можем решить проблему, просто изменив опцию UTF-16LEна UTF-16без удаления //U. Я это подтвердил.
Tsutomu
3
Я много вижу, как, но не много почему. Почему изменение того, что выглядит как набор символов, имеет значение только в Windows? Мне любопытно все.
NathanTempelman
14

Была такая же проблема: ОС - Ошибка Windows 8 - ExecJS :: RuntimeError ... Решение - отсутствует Node.js

  1. установите Node.js с http://www.nodejs.org/download/
  2. Перезагрузите компьютер
снасср
источник
1
это сработало для меня. Кто-нибудь знает, почему сработала установка node.js?
mpalencia 01
12

У меня была эта проблема, и я испортил Интернет, я запускаю Windows 8 с этим файлом драгоценного камня 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

Пошел на 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.

И затем волшебным образом это сработало ( @ #% $ & ^ @ $% !!!?!?!) С использованием commandas "cscript //E:jscript //Nologo"и encodingas "UTF-8". Ну что ж.

cofiem
источник
4

Мне пришлось добавить папку nodejs в переменную среды Windows Path. В Windows 8 откройте панель управления, перейдите в раздел «Система», «Дополнительные настройки системы» (слева), нажмите «Переменные среды» слева и отредактируйте переменную Path, чтобы включить каталог в папку nodejs (возможно, в Program Files).

Конечно, вам необходимо установить Node.js (используйте установщик Windows ) и установить CoffeeScript через NPM.

Эван
источник
4

Я знаю, что это очень поздний ответ на эту проблему, но я натолкнулся на нечто подобное и прошел весь путь, чтобы понять, что на самом деле вызывает проблему.

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

Это причина, по которой установка node.js решает проблему (node ​​как минимум es5).

Надеюсь, это поможет некоторым людям, борющимся с ошибкой времени выполнения jsexec.

Мои 2 цента советуют установить узел (очень просто) или установить v8, а не удалять // = require_tree.

Обратите внимание, что execjs будет автоматически использовать node при обнаружении. В противном случае принудительно используйте его, добавив в boot что-то вроде:

ENV['EXECJS_RUNTIME'] = 'Node'

Чтобы установить env в node.

Динуз
источник
установка узла - хорошая идея (и, вероятно,
самая
4

Для пользователей Windows это может сработать. Возникла проблема с запуском coffee-script-source> 1.9.0 в Windows.

Кажется, вам нужно добавить это в свой гем-файл:

драгоценный камень 'кофе-скрипт-источник', '1.8.0'

тогда делай

пакет обновления кофе-скрипт-источник

Я пробовал все вышеперечисленные варианты, а также перепутал несколько их комбинаций, пока не нашел этот Rails-4, ExecJS :: ProgramError на Pages # как приветствие и выполнил несколько обновлений системных гемов, а также установку и обновление пакетов .

Я отменил все свои испытания и понизил свой исходный код сценария кофе, и он работает. Публикация здесь, чтобы помочь кому-либо еще, у кого может быть аналогичная проблема.

Обновление файлов в vendor / cache

coffee-script-source-1.8.0.gem Удаление устаревших файлов .gem из вендора / кеша coffee-script-source-1.9.1.1.gem Обновлен пакет!

DJSampat
источник
Я попробовал вариант 3 принятого ответа, затем получил «Ошибка аргумента», попытался установить nodejs, не помог, добавил nodejs в переменные пути (я на Win10) и, наконец, попробовал ваш подход. Работал! Спасибо
elk
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.

Как я объясняю в комментариях к вопросу, это на самом деле не решает основную проблему, которая вызывает ошибку, а просто обходит ее.

Колин Р
источник
Привет, Колин Р., Мне нужна помощь. Что делать, если ошибка возникает в строке 5, где только удаление <% = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track' => true%> эта строка кода устранила проблему. Но бутстрап не применяется к веб-странице. Даже удаление * = require_tree. из application.css.sass не работает. В системе моего друга установлена ​​32-битная Windows 7, nodejs не установлен. Даже предложенный вами способ 3 не работает. Думаю, в моем случае проблем с js нет. Есть идеи, как предотвратить ошибку?
ученик
Я также установил Node.js, и путь к npm установлен в переменных среды. Все еще та же ошибка. Я разрабатываю приложение в 64-битной ОС Windows 8.1, и используются те же драгоценные камни.
ученик
2

Я использовал решение номер 2, потому что раньше у меня была эта ошибка, но в этом случае не сработало, затем я добавил

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

и беги

bundle install

и моя проблема была исправлена

Юлием Алавез
источник
Если вы использовали решение номер 2, вы должны перезагрузить всю командную строку в windnows после установки 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 и больше ..... ничего! Пока я не вернул весь код в папку по умолчанию и, к моему удивлению, снова катался :)

На случай, если кому-то это может пригодиться (я не могу объяснить, почему это произошло, возможно, кто-то может без предположений)

данкун чирига
источник