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
Для начинающих вроде меня:
к
<%= 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, кстати.
Ответ 12
Запуск Win 8 64 бит
рельсы 4.2.5
рубин 2.1.7
Это работало для меня