В Rails 3.1 проблема с javascript_include_tag в application.html.erb - PullRequest
18 голосов
/ 02 сентября 2011

Я создал чистое и простое приложение на Rails 3.1 под названием demo1. Он содержит два контроллера - привет и до свидания. Я получаю следующую ошибку при попытке загрузить http://localhost:3000/say/hello:

ActionView::Template::Error (
  (in /home/me/dev/ruby/demo1/app/assets/javascripts/say.js.coffee)):
    3: <head>
    4:   <title>Demo1</title>
    5:   <%= stylesheet_link_tag    "application" %>
    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___558576499_89622220'

Проблемная строка application.html.erb :

<%= javascript_include_tag "application" %>

Когда я создавал приложение с использованием Rails 3.0, эта строка была:

<%= javascript_include_tag :defaults %>

И это работало нормально. Фактически, когда я изменяю application.html.erb для использования: по умолчанию все работает, но я хочу использовать новые возможности Rails 3.1.

Кажется, я ничего не могу найти в Google по этому поводу, наверное, потому что Rails 3.1 только что был выпущен.

Кстати, я следую первой главе Agile Web Development с Rails (4-е издание), обновленной для Rails 3.1 book.

Некоторая информация об окружающей среде, которая может помочь в ответе на этот вопрос:

$ cat /etc/issue
Ubuntu 10.04.2 LTS \n \l

$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]

$ rails -v
Rails 3.1.0

Содержимое файла say.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/

Ответы [ 14 ]

33 голосов
/ 02 сентября 2011

Хорошо, я выяснил, в чем проблема, и поэтому я отвечу на свой вопрос.

Проблема была в app / assets / javascripts / application.js файл содержит закомментированный код.Тем не менее, одна из закомментированных строк была следующей:

//= require_tree .

Когда я удаляю эту строку, все работает нормально.

Надеюсь, это поможет.Если кто-то может дать некоторое представление о том, почему подчеркивание было причиной проблемы, было бы здорово.

7 голосов
/ 03 февраля 2012

Я только что столкнулся с этой проблемой при запуске нового приложения RoR 3.2.1.Проблема в том, что вам не хватает среды выполнения JS, потому что перед строкой

# gem 'therubyracer'

в вашем Gemfile стоит #.Только Бог знает, почему они отправляют Rails с этой строкой с комментариями, потому что любой учебник, использующий generate scaffold или аналогичный, приведет к тому, что процесс компиляции ресурсов будет запущен по созданному файлу coffeescript.

Решение состоит в том, чтобы раскомментировать эту строку,Установка другой среды выполнения JS также может решить проблему.См., Например, ExecJS и не удалось найти среду выполнения JavaScript .

Официальное руководство по Ruby на рельсах гласит:

Компиляция CoffeeScript для JavaScriptтребуется среда выполнения JavaScript, а отсутствие среды выполнения приведет к ошибке execjs.Обычно Mac OS X и Windows поставляются с установленной средой выполнения JavaScript.Rails добавляет гем therubyracer в Gemfile в закомментированной строке для новых приложений, и вы можете раскомментировать, если вам это нужно.therubyrhino является рекомендуемой средой выполнения для пользователей JRuby и по умолчанию добавляется в Gemfile в приложениях, созданных под JRuby.Вы можете узнать обо всех поддерживаемых средах выполнения в ExecJS.

3 голосов
/ 10 октября 2013

Просто удалите 2 строки из application.js

//= require turbolinks

//= require_tree

2 голосов
/ 04 сентября 2013

Для будущих гуглеров я спустился по кроличьей норе, пытаясь установить therubyracer, пока не наткнулся на этот пост:

ExecJS :: RuntimeError в движке рельсов 3.2.8 с javascript_include_tag

Упомянутая ссылка объясняет, что ExecJS неправильно настроен для Windows 8 из коробки. В частности, обходной путь, описанный Потцком, помог мне.

https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952

Он включает в себя изменение способа запуска исполняемого файла cscript в ExecJS в %rubyinstall%\gems\2.0.0\gems\execjs-2.0.1\lib\execjs\runtimes.rb:

# 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
# )

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
)

Само собой разумеется, что это не постоянное решение, но оно заставляет меня работать до тех пор, пока не будет установлен патч.

2 голосов
/ 03 декабря 2012

Если вы работаете в Windows и использовали RailsInstaller для начала разработки, вам нужно использовать этот файл .bat, включенный в RailsInstaller, для запуска вашего сервера. Также, к сожалению, вы не можете использовать любой CMD-хук, например conemu, для запуска сервера.

2 голосов
/ 25 октября 2011

У меня была такая же проблема с рельсами 3.1.1

Как только я восстановил следующий код в моем Gemfile, моя проблема исчезла:

group :assets do
  gem 'sass-rails',   '~> 3.1.4'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
end

gem 'jquery-rails'

Это было помещено в мой Gemfile при первоначальной настройке проекта, то есть с использованием "rails new myapp".

Обратите внимание, что в мой файл шаблона я включаю:

<%= javascript_include_tag :application %>

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

1 голос
/ 28 октября 2015

Удаление //= require_tree просто остановит загрузку ваших файлов javascript в рельсы.Вероятно, это остановит ошибку, но возможно не то, что вам нужно.

Однако в моем случае у меня было несколько .js.coffee файлов с неправильным отступом.Как только я исправил это (удалив их), все заработало.

0 голосов
/ 02 августа 2016

Добавление драгоценного камня therubyracer устранило проблему. Я получаю сообщение об ошибке только после добавления внешнего файла js через <% = javascript_include_tag%>

0 голосов
/ 16 апреля 2015

У меня есть эта проблема в Rails 4, и если я переключаю ее на «значения по умолчанию», а не на «application», она работает, как говорит OP. Но это во внешнем Gem, который я бы предпочел не редактировать. Я обнаружил, что если я заставлю свой Gemfile использовать версию 1.8.0 coffee-script-source, выполнить установку пакета и запустить сервер, то все будет нормально.

0 голосов
/ 11 марта 2015

Просто УДАЛИТЕ следующую строку (строка № 6) из файла генератора (application.html.erb):

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>

, пожалуйста, сообщите мне, если есть какой-либо недостаток, чтобы удалить эту строку

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...