ExecJS:: RuntimeError в Windows пытается следовать рубитету

UPDATE: Colin предложение об удалении строки // = 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 и другие вещи, которые я даже не могу запомнить. Вот файл 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''

и вот 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 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 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 и попробовал различные драгоценные камни, но, пожалуйста, предложите изменения, которые могут помочь мне разобраться в окнах. Я использовал rubyinstaller для всего.

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

Ответ 1

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

Параметры:

1) Удаление //= require_tree ./Игнорирование проблемы - Как указано выше в ColinR, эта строка не должна вызывать проблемы в первую очередь. Существует настоящая проблема с тем, что ExecJS корректно работает со временем выполнения JavaScript в вашей системе, и удаление этой строки просто игнорирует этот факт.

2) Установка Node.js/Running away - Многие люди, похоже, просто устанавливают 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 Script Хост (JScript)

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

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

Исправление, которое сработало для нас: В системе, имеющей проблемы, найдите файл ExecJS runtimes.rb. Это выглядит как this. Сделайте копию найденного файла для резервного копирования. Откройте исходное 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, там уже много чего происходит.:)

Ответ 2

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

Ответ 3

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

Достигнут http://nodejs.org/download/ - перезапустил машину, и все сработало.

Ответ 4

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

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

Ответ 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". О, хорошо.

Ответ 6

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

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

Именно поэтому установка node.js решает проблему (node не менее es5).

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

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

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

ENV['EXECJS_RUNTIME'] = 'Node'

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

Ответ 7

Для пользователей Windows это может сработать. Существует проблема с кофе script -source > 1.9.0, работающим на окнах.

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

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

то do

bundle update coffee- script -source

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

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

Обновление файлов в поставщике/кеше

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

Ответ 8

Быстрое и грязное решение: удалите //= require_tree . с application.js.

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

Ответ 9

Для начинающих вроде меня:

  • Перейдите в \app\views\layouts\application.html.erb
  • Измените строку 6:

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

к

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

Источник из учебника для исправления здесь

Ответ 10

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

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

и запустите

bundle install

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

Ответ 11

Здесь менее сложное решение для начинающих:

Если вы просто работаете над учебником, вы, вероятно, работаете с Gemfile по умолчанию (или очень близко). Вы можете открыть его в текстовом редакторе и удалить знак фунта с передней части этой строки:

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

Вам нужно будет повторно запустить bundle install, который, вероятно, загрузит несколько вещей. Но как только это произойдет, вы сможете запустить сервер без каких-либо проблем.

По крайней мере, это сработало для меня.

Это также работает на Ubuntu 12.04, кстати.