ExecJS::RuntimeError в Windows пытается следовать rubytutorial
ОБНОВЛЕНИЕ: предложение Colin R об удалении строки //= 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''
а вот сессия.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 для всего.
Что мне не хватает?
13 ответов
Мой друг пытался обучить 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, встроенный в JRuby
- Node.js
- Apple JavaScriptCore - в комплекте с Mac OS X
- Microsoft Windows Script Host (JScript)
(с сайта github.com/sstephenson/execjs#execjs)
3) Фактическое решение проблемы / Обучение - Используйте знания вариантов 1 и 2 для поиска других решений. Я не могу сказать вам, сколько веб-страниц, которые я закрыл, увидев варианты 1 или 2, было приемлемым решением, прежде чем мы на самом деле нашли информацию о корневой проблеме, которая у нас была. Единственная причина, по которой мы продолжали искать, заключалась в том, что мы не могли поверить, что команда Rails (1) вставит строку кода в каждый проект, сгенерированный скаффолдом, который вызвал проблему, или (2) потребует, чтобы мы установили дополнительное программное обеспечение только для запуска по умолчанию строка кода. И в итоге мы пришли к решению проблемы с корнем (ваши мили могут отличаться).
Исправление, которое сработало для нас: в системе, в которой возникли проблемы, найдите файл extimesJS 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
Если это не решило проблему, вы всегда можете перезаписать измененный файл runtime.rb резервной копией, которую вы (надеюсь) сделали, и все вернется на круги своя. В этом случае рассмотрите вариант 3 и продолжайте поиск. Дайте нам знать, что в конечном итоге работает для вас... если только он не удаляет require_tree или не устанавливает node.js, этого уже достаточно.:)
Была та же проблема ОС - Windows 8 Ошибка - "ExecJS::RuntimeError..." Решение - отсутствует Node.js
- установить Node.js с http://www.nodejs.org/download/
- Перезагрузите компьютер
У меня была эта проблема, и я искал в интернете. Я запускаю Windows 8 с этим файлом geils 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/ установил - перезагрузил машину и все заработало.
Я одобрил маршрут обучения. Кажется, проблема связана с
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"
, Ну что ж.
Мне пришлось добавить папку nodejs в переменную среды Windows Path. В Windows 8 откройте панель управления, перейдите в "Система", "Дополнительные параметры системы" (слева), нажмите "Переменные среды" слева и отредактируйте переменную "Путь", включив каталог в папку вашего nodejs (возможно, в "Program Files").
Конечно, вы должны иметь установленный Node.js (использовать установщик Windows) и установить CoffeeScript через NPM.
Я знаю, что это очень поздний ответ на этот вопрос, но я натолкнулся на что-то похожее и прошел полный путь, чтобы понять, что на самом деле стало причиной проблемы.
Оказалось, что стандартный движок windows jscript по-прежнему работает на es3, и многие гемы используют возможности es5 или es6. К сожалению, если это произойдет (вы используете gem или фрагмент кода, использующий функции es5 или es6), то нет способа заставить его работать на окнах с собственным движком js.
Это причина, по которой установка node.js решает проблему (по крайней мере, узел es5).
Надеюсь, что это может помочь некоторым людям, борющимся с ошибкой времени выполнения jsexec.
Мои 2 цента советуют установить узел (очень просто) или установить v8, а не удалять //=require_tree.
Обратите внимание, execjs будет автоматически использовать узел, если он обнаружен. В противном случае принудительно используйте его, добавив в загрузку что-то вроде
ENV['EXECJS_RUNTIME'] = 'Node'
Чтобы установить env для узла.
Для пользователей Windows это может работать. Существует проблема с coffee-script-source >1.9.0, работающим в Windows.
Кажется, вы должны добавить это в свой gemfile:
gem 'coffee-script-source', '1.8.0'
тогда делай
пакет обновления кофе-скрипт-источник
Я перепробовал все вышеперечисленные опции, а также перепутал несколько их комбинаций, пока не обнаружил этот Rails-4, ExecJS::ProgramError в Pages# приветствовать и сделал несколько обновлений системных гемов, а также установки и обновления пакетов.
Я отменил все свои испытания и понизил мой источник сценариев кофе, и это работает. Публикация здесь, чтобы выручить любого, у кого может быть похожая проблема.
Обновление файлов в вендоре / кеше
coffee-script-source-1.8.0.gem Удаление устаревших файлов.gem из vendor/cache coffee-script-source-1.9.1.1.gem Обновление пакета!
Для начинающих, как я:
- Перейдите в \app\views\layouts\application.html.erb
Измените строку 6 с:
'<% = javascript_include_tag' application ',' data-turbolinks-track '=> true%>'
в
<%= javascript_include_tag 'defaults', 'data-turbolinks-track' => true %>
Быстрое и грязное решение: удалить //= require_tree .
от application.js
,
Как я объясняю в комментариях к вопросу, это на самом деле не решает основную проблему, которая вызывает ошибку, а просто обходит ее.
Я использовал решение № 2, потому что раньше у меня была эта ошибка, но в этом случае она не работала, затем я добавил
gem 'coffee-script-source', '1.8.0'
и беги
bundle install
и моя проблема была исправлена
Вот менее сложное решение для начинающих:
Если вы просто работаете с учебником, вы, вероятно, работаете с Gemfile по умолчанию (или почти). Вы можете открыть его в текстовом редакторе и убрать знак фунта в начале этой строки:
# gem 'therubyracer', :platforms => :ruby
Вам нужно будет повторно запустить bundle install
, который, вероятно, загрузит несколько вещей. Но как только это произойдет, вы сможете без проблем запустить сервер.
По крайней мере, это сработало для меня.
Это также работает на Ubuntu 12.04, кстати.
Изменили ли вы местоположение своего кода в C: \ Users \ this-user \ yo-app?
Когда я был молодым в рельсах, я создал приложение, и местоположение моего приложения по умолчанию было C:\Users\Duncan\my-app, а затем, когда я изменил свое приложение и поместил его в D:\All-my-Apps-папка у меня была эта ошибка....
Я почесал голову, попробовал 1,2,3 и более..... ничего! Пока я не вернул весь код в папку по умолчанию и, к моему изумлению, я снова катался:)
В случае, если кто-то может найти это полезным (я не могу объяснить, почему это произошло, возможно, кто-то может без спекуляций)
Запуск Win 8 64 битных рельсов 4.2.5 ruby 2.1.7