Ответ 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)
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, там уже достаточно много всего. :)