Неполное "\n" в UTF-16LE Ошибка

Я пытался следовать нескольким учебникам на рельсах, и каждый раз, когда я сталкиваюсь с следующей проблемой во время работы rails s:

Started GET "/" for 127.0.0.1 at 2014-09-14 06:57:44 +0100
Connecting to database specified by database.yml
Processing by CarsController#index as HTML
  Car Load (1.0ms)  SELECT "cars".* FROM "cars"
  Rendered cars/index.html.erb within layouts/application (396.0ms)
Completed 500 Internal Server Error in 101655ms

ActionView::Template::Error (incomplete "\n" on UTF-16LE
  (in /cygdrive/c/rails/todolist/3/rails-angular-example-master/app/assets/javascripts/angular_app.js.coffee.erb)):
    3: <head>
    4:   <title>Angular</title>
    5:   <%= stylesheet_link_tag    "application", :media => "all" %>
    6:   <%= javascript_include_tag "application" %>
    7:   <%= csrf_meta_tags %>
    8: </head>
    9: <body>
  app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb__988651031__1054838708'
  app/controllers/cars_controller.rb:6:in `index'
  config/initializers/quiet_assets.rb:8:in `call_with_quiet_assets'

Учебное пособие: https://github.com/wulftone/rails-angular-example

1 ответ

Это происходит, когда ExecJS пытается обработать ваши активы (javascript и coffeescript), а кодировка вашего файла не UTF-16LE.

Самое популярное исправление: используйте альтернативную среду выполнения ExecJS

Вероятно, наиболее популярным решением является использование NodeJS в качестве среды выполнения ExecJS. Один из способов сделать это:

  1. Установить nodejs
  2. Установить жизнеспособную среду EXECJS_RUNTIME в Node
  3. Запустите свой сервер Rails

Альтернативное исправление: изменить существующую конфигурацию

Альтернативой выполнению другой установки (NodeJS) является изменение конфигурации среды выполнения ExecJS по умолчанию. Я считаю, что ваша система использует cscript,

Посмотрите на ваши execjs runtimes.rb файл. (Он находится в вашем каталоге gems.) Вы можете увидеть последнюю версию этого файла на github здесь. Он содержит следующее:

JScript = ExternalRuntime.new(
  name:        "JScript",
  command:     "cscript //E:jscript //Nologo //U",
  runner_path: ExecJS.root + "/support/jscript_runner.js",
  encoding:    'UTF-16LE' # CScript with //U returns UTF-16LE
)

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

  • Вы можете обнаружить, что удаление //U устраняет проблему
  • Вы можете обнаружить, что изменение UTF-16LE в UTF-8 устраняет проблему
  • Вы можете обнаружить, что комбинация обоих этих шагов решает проблему.

Эти инструкции взяты из ExecJS::RuntimeError в Windows, пытающейся следовать rubytutorial

Другие вопросы по тегам