Rails 3.1 fields_for рендерит пару полей и останавливается

Находясь в производственной среде, где размещается мое приложение с помощью Phusion Passanger + Nginx, я столкнулся с тем, что fields_for не может правильно отображать огромное количество полей.

Пример:

members_controller.rb:

class MembersController << ApplicationController

  def new
    @member = Member.new

    # There are 200 or so groups in the database.
    current_client.groups.active.each do |group|
      @member.affiliation.build(:group => group)
    end
  end
end

новый.html.haml:

= form_for @member do |f|
  = f.text_field :name
  = f.text_field :phone
  = f.fields_for :affiliations do |affiliation_form|
   .group_field
      = affiliation_form.hidden_field :group_id
      = affiliation_form.label :_destroy, affiliation_form.object.group.name
      = affiliation_form.check_box :_destroy, { }, "0", "1"

Пока все хорошо, в разработке это вернет все поля правильно, как я хочу. При развертывании приложения на рабочем сервере (тот же ruby ​​1.9.2p180). HTML-код неполный, примерно 30-50 или около того из 200 полей, отображаемых с последним *.group_field*, не имеющим или имеющим некоторые элементы (каждый раз разные результаты).

Последнее поле группы:

<div class="group_field">
  <input id="..." name="..." type="hidden" value="48"> 
  <label for="...">...</label>
  <input name="..." type="hidden" value="1">
  <input id="..." name="..." type="checkbox" value="1"> 
</div>

Последнее поле группы:

<div class="group_field">
  <input id="..." name="..." type="hidden" value="49">
  <label for="...">...</label>
</div>

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


person zeeraw    schedule 16.09.2011    source источник


Ответы (1)


Я почти могу гарантировать, что это связано с тем, что в Rails 3.1 вводится HTTP-стриминг. Несмотря на кажущуюся добровольную природу этой функции, похоже, что она вызывает много проблем, возможно, из-за изменений в средствах буферизации вывода ActionView, от которых такие помощники, как fields_for, получают большое преимущество.

На данный момент, в основном из-за этого изменения, поддержка nginx и пассажиров для Rails 3.1 в лучшем случае ненадежна. Вы найдете другие похожие вопросы, заканчивающиеся переходом на Unicorn, Thin или что-то подобное и проксирование от nginx.

person sj26    schedule 20.09.2011
comment
Это очень помогло, очень признателен. - person zeeraw; 20.09.2011