ExecJS:: RuntimeError в индексе пользователей # (RoR)

Просто запустил команду "произвести эвакуацию пользователей...".

Затем я перехожу к localhost:3000/users/ и вижу следующее:

 ExecJS::RuntimeError in Users#index

Showing C:/Users/TheOnlyUser/Desktop/NMS/nms2/app/views/layouts/application.html.erb where line #6 raised:


  (in C:/Users/TheOnlyUser/Desktop/NMS/nms2/app/assets/javascripts/ads.js.coffee)

Extracted source (around line #6):

3: <head>
4:   <title>Nms2</title>
5:   <%= stylesheet_link_tag    "application", :media => "all" %>
6:   <%= javascript_include_tag "application" %>
7:   <%= csrf_meta_tags %>
8: </head>
9: <body>

Rails.root: C:/Users/TheOnlyUser/Desktop/NMS/nms2
Application Trace | Framework Trace | Full Trace

app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___753556572_43068540'
app/controllers/users_controller.rb:7:in `index'
...

Что это значит?

UPDATE:

Это в Windows 8. Windows 7 не дает этих ошибок.

Ответ 1

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

Опции:

1) Удаление //= require_tree. /Игнорирование проблемы - эта строка не должна вызывать проблему в первую очередь. Существует реальная проблема с 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) потребует, чтобы мы установили дополнительное программное обеспечение только для запуска по умолчанию строка кода. И в итоге мы пришли к решению проблемы с корнем (ваши мили могут отличаться).

Фикс, который работал на нас: О системе возникли проблемы, найти 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

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

Ответ 2

Как и комментаторы, вам, вероятно, не хватает драгоценного камня. Попробуйте добавить в свой gemfile следующее:

gem 'therubyracer'

И запустите bundle install

Ответ 3

Сначала я отправился на решение 3 выше Kevin P, и все отлично работало на моей машине с Windows 8.

После обновления MS вчера вечером (8/19/13) я даже не смог сделать домашнюю страницу в своем приложении rails.

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

Ответ 4

Редактирование runtimes.rb решило проблему в Win 8.1

Ответ 5

Самый простой способ решить проблему - установить Node.js. Ruby обнаружит это автоматически, и у вас не будет больше ошибок времени выполнения JS.

Ответ 6

файл runtimes.rb

 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
    )

Работа в Windows 8.1

Ответ 7

У меня была та же проблема, и решение 3 от Kevin P работало для меня (редактирование файла runtimes.rb).
Моя настройка во время применения решения выглядит следующим образом:
ОС: Windows 8.1
Ruby версия: 1.9.3p484
версия Rails: 3.2.14

Ответ 8

Самый быстрый способ я исправил эту проблему:

gem 'therubyracer', '0.12.1'

обновление пакета

установить пакет

Надеюсь, это поможет.