Кнопки с использованием Ajax не работают на Heroku
Здесь я следую за Майклом Хартлом, известным в Ruby on Rails Tutorials (Rails 3.2). Раздел "11.2.5. Рабочая кнопка с Ajax" работает на локальной машине, но не работает на Heroku. Когда я нажимал кнопки "Follow" или "Unfollow", ничего на странице не обновлялось. Хотя я вижу, что действие действительно было вызвано из журналов.
2012-02-22T04:05:17+00:00 app[web.1]: Started POST "/relationships" for 67.188.133.121 at 2012-02-22 04:05:17 +0000
2012-02-22T04:05:17+00:00 app[web.1]: Processing by RelationshipsController#create as JS
2012-02-22T04:05:17+00:00 app[web.1]: Parameters: {"utf8"=>"✓", "authenticity_token"=>"nsYrHM0aLlEGoI19Zv8hImEmbfWPZ+gSy5xmgAV+V60=", "relationship"=>{"followed_id"=>"15"}, "commit"=>"Follow"}
2012-02-22T04:05:17+00:00 app[web.1]: Redirected to https://etl-rails32-tut-sample-app.herokuapp.com/users/15
2012-02-22T04:05:17+00:00 app[web.1]: cache: [POST /relationships] invalidate, pass
2012-02-22T04:05:17+00:00 app[web.1]: Completed 302 Found in 66ms (ActiveRecord: 61.2ms)
2012-02-22T04:05:17+00:00 heroku[router]: POST etl-rails32-tut-sample-app.herokuapp.com/relationships dyno=web.1 queue=0 wait=0ms service=75ms status=302 bytes=123
Затем мне пришлось вручную нажать кнопку обновления браузера (FireFox 7.0), чтобы обновить всю страницу, и кнопка будет правильно переключена в результате.
Файл, app/views/layouts/application.html.erb выглядит следующим образом:
<!DOCTYPE html>
<html>
<head>
<title><%= full_title(yield(:title)) %></title>
<%= render 'layouts/stylesheets' %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<div class="container">
<%= render 'layouts/header' %>
<section class="round">
<% flash.each do |key, value| %>
<%= content_tag(:div, value, class: "flash #{key}") %>
<% end %>
<%= yield %>
</section>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
</div>
</body>
</html>
Возможно, я опоздал на объявление, которое вы, возможно, нашли и ответили, но это исправило это для меня.
Если вы используете кофе-рельсы, жемчуг переместите драгоценный камень с кофе-рельсами за пределами группы активов. Я положил его прямо под jquery-rails gem (не думаю, что это имеет значение), но после того, как он оказался вне группы активов, он работал в героике.
Я только что закончил загрузку моего кода в герою, и кнопки работают. Я тоже n00b. Мой application.html.erb довольно близок к вашему. Я посмотрел на ваш сайт (очень сильно отличается от моего), и я получаю ту же проблему, которую вы получаете. Мои журналы показывают разницу (удаленные заголовки строк):
Started POST "/relationships" for 1.1.9.1 at 2012-04-10 21:06:47 +0000
Processing by RelationshipsController#create as JS
Parameters: {"utf8"=>"✓", "authenticity_token"=>"jF6cuJakhooP/fIdfAhIfhy+Djgox3jukyJbm86UkVU=", "relationship"=>{"followed_id"=>"2"}, "commit"=>"Follow"}
Rendered users/_unfollow.html.erb (3.8ms)
Rendered relationships/create.js.erb (7.0ms)
Completed 200 OK in 36ms (Views: 4.2ms | ActiveRecord: 24.1ms)
cache: [POST /relationships] invalidate, pass
POST strong-stone-3754.herokuapp.com/relationships dyno=web.1 queue=0 wait=0ms service=93ms status=200 bytes=584
Моя ручка делает вашу переадресацию.
Не знаю, насколько это важно, но я зацепил.js как с вашей страницы, так и с моей и сделал wc на них. Они более чем разные.
18 1559 120293 mine.js
18 1343 99603 yours.js
Возможно, проблема заключается в представлении/отношениях/create.js.erb?
$("#follow_form").html("<%= escape_javascript(render('users/unfollow')) %>")
$("#followers").html('<%= @user.followers.count %>')
Или, возможно, для создания и уничтожения методов Relationship RelationsContoller должны отвечать следующие запросы AJAX:
respond_to do |format|
format.html { redirect_to @user }
format.js
end
- Вопросы
- Railstutorial.org
- Кнопки с использованием Ajax не работают на Heroku