Ошибка Rails 3.1 с javascript_include_tag в application.html.erb
Я создал чистую и простое приложение 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 на использование: defaults все работает, но я хочу использовать новые функции Rails 3.1.
Похоже, что я не могу что-то изменить в Google, думаю, потому что Rails 3.1 только что был выпущен.
Кстати, я следую первой главе в Agile Web Development with Rails (4-е издание) Обновлено для Rails 3.1.
Некоторая информация об окружающей среде, которая может помочь в ответе на этот вопрос:
$ 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/
Ответы
Ответ 1
Хорошо, я выяснил, в чем проблема, и поэтому я отвечу на собственный вопрос.
Проблема заключалась в файле app/assets/javascripts/application.js, содержащем код с комментариями. Однако одна из прокомментированных строк была следующей:
//= require_tree .
Когда я удаляю эту строку, все работает нормально.
Надеюсь, это поможет. Если кто-то может дать некоторое представление о том, почему подчеркивание вызывало проблему, было бы здорово.
Ответ 2
Я просто столкнулся с этой проблемой при запуске нового приложения RoR 3.2.1. Проблема в том, что вам не хватает времени выполнения JS, потому что строка
# gem 'therubyracer'
в вашем Gemfile есть это # перед ним. Бог знает, почему они отправляют Rails с указанной строкой, потому что любой учебник, в котором используется generate scaffold
или аналогичный, приведет к тому, что процесс компиляции активов будет отключен через сгенерированный файл coffeescript.
Решение состоит в том, чтобы раскомментировать эту строку. Установка другой среды выполнения JS также может решить проблему. См. ExecJS и не удалось найти время выполнения JavaScript.
официальный рубин на направляющих rails говорит:
При компиляции CoffeeScript на JavaScript требуется время выполнения JavaScript, и отсутствие времени выполнения даст вам ошибку execjs. Обычно Mac OS X и Windows поставляются с установленной версией JavaScript. Rails добавляет драгоценный камень therubyracer в Gemfile в комментариях для новых приложений, и вы можете раскомментировать, если вам это нужно. therubyrhino является рекомендуемым временем выполнения для пользователей JRuby и по умолчанию добавляется Gemfile в приложения, созданные в JRuby. Вы можете исследовать все поддерживаемые среды выполнения в ExecJS.
Ответ 3
Просто удалите 2 строки из application.js
//= require turbolinks
//= require_tree
Ответ 4
У меня была та же проблема, что и рельсы 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 %>
Надеюсь, что поможет
Ответ 5
Если вы работаете в Windows, и вы использовали RailsInstaller для продолжения разработки, вам нужно использовать этот .bat файл, включенный в RailsInstaller, для запуска вашего сервера. К сожалению, вы не можете использовать какой-либо крючок CMD, например conemu, для запуска сервера.
Ответ 6
В интересах будущих гуглеров я спустился по кроличьей норе, пытаясь установить therubyracer
, пока не наткнулся на этот связанный пост:
ExecJS:: RuntimeError в рельсах 3.2.8 с javascript_include_tag
В приведенной ссылке объясняется, что ExecJS настроен неправильно для Windows 8 из коробки. В частности, обходной путь, описанный Pottsk, помогло.
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
)
Само собой разумеется, что это не постоянное решение, но оно запускает меня до тех пор, пока патч не будет включен.
Ответ 7
Удаление //= require_tree
приведет к тому, что ваши файлы javascript не будут загружены в рельсы. Вероятно, это остановит ошибку, но, вероятно, не то, что вам хотелось бы.
Однако в моем случае у меня были некоторые .js.coffee
файлы с неправильным отступом. Как только я исправил это (удалив их), он сработал.
Ответ 8
Еще одна вещь, которую вы можете попробовать, которая работала для меня, - добавить json (и, возможно, также yajl-ruby) драгоценный камень в ваш Gemfile. Я не понимаю, почему они еще не были установлены раньше, потому что:
рельсы зависят от actionpack
который зависит от звездочек
который зависит от json и tilt
и наклон зависит от yajl-ruby
Однако, как-то, кажется, что многие из зависимых драгоценных камней не были установлены!?
Ответ 9
В случае использования linux (Ubuntu linux, подобного моему), установите время работы javascript. Лучше всего выполнить следующую команду для установки,
apt-get install nodejs
или иначе, для каждого нового создания проекта rails добавьте
gem 'therubyracer' в ваш gemfile и запустить установку пакета
Ответ 10
devise_scope :user do
get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
end
Если ваш route.rb имеет указанную выше строку, просто удалите ее и запустите. Это то, что исправило мою проблему.
Ответ 11
изменить файл генератора (application.html.erb.tt
) следующим образом:
<%= javascript_include_tag "application", "data-turbolinks-track" true %>
<%= javascript_include_tag :default, "data-turbolinks-track" true %>
Ответ 12
Просто удалите следующую строку (строка № 6) из файла генератора (application.html.erb):
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
обновите меня, если есть какие-либо недостатки, чтобы удалить эту строку
Спасибо
Ответ 13
У меня есть эта проблема в Rails 4, и если я переключу ее на "по умолчанию", а не на "приложение", она работает, как говорит OP. Но это во внешнем драгоценном камне, которое я бы лучше не редактировал. Я обнаружил, что если я заставляю свой Gemfile использовать версию 1.8.0 для кофе- script -source, установить пакет и запустить сервер, тогда все будет хорошо.
Ответ 14
Добавление драгоценного камня 'therubyracer' устранило проблему.
Я получал ошибку только после добавления внешнего js файла через <% = javascript_include_tag% >