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.


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

//= require turbolinks

//= require_tree


у меня была такая же проблема с запуском 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-файла через