Rails 3.1 fields_for呈现几个字段和停止

时间:2011-09-16 10:16:16

标签: ruby-on-rails-3.1 production-environment 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

new.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个左右的组,这些组合完全正常。 任何人都可以帮我找出这个非常奇怪的错误吗?

1 个答案:

答案 0 :(得分:1)

我几乎可以保证这是由于Rails 3.1 introducing HTTP streaming。尽管该功能具有明显的选择性,但它可能会导致许多问题,这可能是由于ActionView的输出缓冲设施发生了变化,而fields_for等助手可以利用这些设施。

目前并且主要是由于这一变化,对于Rails 3.1的nginx和乘客支持充其量只是片状。您会发现other, similar questions以切换到UnicornThin或类似内容并从nginx代理结束。