Подтвердить что ты не робот

Ошибка 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/
4b9b3361

Ответ 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% >