Проблемы маршрутизации с составными формами на Heroku

#ruby-on-rails #google-chrome #heroku #rails-routing

#ruby-on-rails #google-chrome #heroku #rails-маршрутизация

Вопрос:

Это очень странная проблема, и, к сожалению, я не могу предоставить массу информации, поскольку я даже не знаю, с чего начать диагностику проблемы. Я надеюсь, что кто-нибудь, услышавший, волшебным образом знает, что делать, и я рад уточнить по мере необходимости.

По какой-то причине каждый раз, когда я отправляю новую составную форму с вложенным файлом на Heroku с помощью Chrome, при отправке я отправляюсь на действие «индекс» по умолчанию — то есть на страницу, на которую я был бы отправлен, если бы я отправил GET вместо POST.

Я использую стандартные маршруты RESTful в Rails, поэтому в моих routes.rb есть следующее:

 resources :documents do
  member do
    get :download, :follow
  end
end
  

Мои формы довольно стандартные:

 <%= form_for @document, :html => { :multipart => true } do |f| %>
  <!-- Form code -->
<% end %>
  

Но опять же, это обрабатывается как запрос GET, а не POST, поэтому я просто перенаправлен в / documents. Это верно, даже если я вручную указываю :method => :post в определении формы.

Действительно, действительно странно то, что это происходит только на Heroku и только с Chrome. Формы отлично работают в моей локальной версии разработчика с использованием Chrome или в Heroku с использованием Safari.

Нигде в коде не происходит перенаправления, и когда я проверяю журналы Heroku, он сообщает только о ПОЛУЧЕНИИ / documents, никогда POST с последующей обработкой, которая могла бы это объяснить.

Любая помощь была бы высоко оценена. Я действительно не знаю, с чего начать пытаться решить это.

ОБНОВЛЕНИЕ: я использую Chrome для Mac, бета-версия 12.0.742.53.

Вот вывод формы.

 <form accept-charset="UTF-8" action="/documents" class="new_document" enctype="multipart/form-data" id="new_document" method="post">
  <div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="amp;#x2713;" /><input name="authenticity_token" type="hidden" value="q8Qv4q9BXdV4yWzsPx9cgZoFGhJHxj6Nzje/SSnYsYo=" /></div>
  ....
  <input type="file" name="document[file]" />
  ....
</form>
  

Кажется, что с маршрутами все в порядке, которые включают следующее:

 POST   /documents(.:format)   {:action=>"create", :controller=>"documents"}
  

Комментарии:

1. Я хотел бы увидеть ваш <form ...> тег HTML и соответствующие маршруты из rake routes . Но поскольку вы говорите, что это работает на local / Chrome и Heroku / Safari, это может быть что-то более тонкое, например, заголовки HTTP. Любая дополнительная информация по этим направлениям помогла бы. Какая версия Chrome? Я использую канал разработчика, и я видел в нем значительные ошибки, которые никогда не попадали на более стабильные каналы.

2. Спасибо, Джонатан — только что обновил вопрос версией Chrome, маршрутом и выводом формы. Я также посмотрю на HTTP-заголовки на случай, если там что-то происходит.

Ответ №1:

Не могли бы вы подтвердить, что, по вашему мнению, у вас есть <%= csrf_meta_tag %>