Rails 3.1 проблема с javascript include tag в приложении.формат html.Эрб
Я создал чистое и простое приложение Rails 3.1 под названием demo1. Он содержит два контроллера-hello и goodbye. Я получаю следующую ошибку при попытке загрузить 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'
проблемная строка приложение.формат html.Эрб - это:
<%= javascript_include_tag "application" %>
когда я создал приложение с помощью Rails 3.0, эта конкретная строка была:
<%= javascript_include_tag :defaults %>
и это хорошо работало. На самом деле, когда я меняю приложение.формат html.erb для использования: по умолчанию все работает, но я хочу использовать новые функции Rails 3.1.
Я не могу ничего найти в Google вокруг этого, я думаю, потому что Rails 3.1 только что был выпущен.
кстати, я следую первой главе в гибкая Веб-разработка с 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
содержание сказать.js.кофе!-Файл -11-->:
# 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 ответов
хорошо, я понял, в чем проблема, и поэтому я отвечу на свой вопрос.
проблема app / активы / javascripts / приложение.js файл содержит закомментированный код. Однако одна из прокомментированных строк была следующей:
//= require_tree .
когда я удаляю эту строку, все работает нормально.
надеюсь, что это помогает. Если кто-то может дать некоторое представление о том, почему подчеркивание вызвало проблему, это было бы здорово.
Я просто столкнулся с этой проблемой при запуске нового приложения RoR 3.2.1. Проблема в том, что вам не хватает времени выполнения JS, потому что строка
# gem 'therubyracer'
в вашем Gemfile есть это # перед ним. Бог знает, почему они отправляют рельсы с этой линией, потому что любой учебник, который использует generate scaffold
или подобное приведет к тому, что процесс компиляции активов сработает над сгенерированным файлом coffeescript.
решение раскомментировать эту строку. Установка другая JS runtime также может решить проблему. См., например,ExecJS и не удалось найти среду выполнения JavaScript.
на официальный ruby on rails guide говорит:
компиляция CoffeeScript в JavaScript требует выполнения JavaScript, и отсутствие выполнения даст вам ошибку execjs. Обычно Mac OS X и Windows поставляются с установленной средой выполнения JavaScript. Rails добавляет драгоценный камень therubyracer в Gemfile в комментариях для новых приложений и вы можете раскомментировать, если нужно. therubyrhino является рекомендуемой средой выполнения для пользователей JRuby и по умолчанию добавляется в Gemfile в приложениях, созданных под JRuby. Вы можете исследовать все поддерживаемые среды выполнения в ExecJS.
у меня была такая же проблема с запуском rails 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 %>
надеюсь, что это поможет
Если вы на Windows, и вы использовали RailsInstaller, чтобы получить развитие, вам нужно использовать это .bat файл в комплекте с RailsInstaller для запуска сервера. К сожалению, вы также не можете использовать любой CMD-крючок, такой как conemu, для запуска сервера.
в интересах будущих гуглеров я спустился в кроличью нору, пытаясь установить therubyracer
пока я не наткнулся на этого поста:
ExecJS:: RuntimeError в движке rails 3.2.8 с javascript_include_tag
упомянутая ссылка объясняет, что ExecJS настроен неправильно для Windows 8 из коробки. В частности, описанную на pottsk сделал трюк для мне.
https://github.com/sstephenson/execjs/issues/81#issuecomment-9892952
Это включает в себя изменение как cscript
исполняемый файл запускается ExecJS в %rubyinstall%\gems.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
)
само собой разумеется, что это не постоянное решение, но оно заставляет меня работать до тех пор, пока патч не будет включен.
удаление //= require_tree
просто остановит загрузку ваших файлов javascript в rails. Это, вероятно, остановит ошибку, но наверное не то, что вы хотите.
однако, в моем случае, у меня были некоторые .js.coffee
файлы с неправильным отступом. Как только я исправил это (удалив их), это сработало.
еще одна вещь, которую вы можете попробовать, которая сработала для меня, - это добавить драгоценный камень json (и, возможно, также yajl-ruby) в ваш Gemfile. Я действительно не понимаю, почему они не были установлены раньше, потому что:
рельсы зависят от actionpack что зависит от звездочек что зависит от json и tilt
и наклон зависит от yajl-ruby
тем не менее, как-то, кажется, многие из зависимых драгоценных камней не были установлены!?
в случае использования linux (Ubuntu linux, как мой), установите JavaScript runtime. Лучше всего выпустить следующую команду для установки,
apt-get install nodejs
или же, для каждого нового создания проекта rails, добавьте
gem 'therubyracer' в ваш gemfile и запустить пакет install
devise_scope :user do
get 'sign_out', :to => 'devise/sessions#destroy', :as => :destroy_user_session
end
Если ваши маршруты.rb имеет эту строку выше, просто удалите ее и запустите. Вот что исправило мою проблему.
изменить файл генератора (application.html.erb.tt
) следующим образом:
<%= javascript_include_tag "application", "data-turbolinks-track" true %>
<%= javascript_include_tag :default, "data-turbolinks-track" true %>
просто удалите следующую строку (строка no. 6) из файла генератора (приложение.формат html.erb):
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
пожалуйста, обновите меня, если есть какой-либо недостаток, чтобы удалить эту строку
спасибо
У меня есть эта проблема в Rails 4, и если я переключу его на "по умолчанию", а не "приложение", он работает, как говорит OP. Но это во внешнем драгоценном камне, который я бы предпочел не редактировать. Я обнаружил, что если заставить Gemfile использовать версию 1.8.0 coffee-script-source, выполнить установку пакета и запустить сервер, то все работает нормально.
добавление therubyracer камень '' Исправлена проблема. Я получал ошибку только после добавления внешнего JS-файла через