Rails 4.1.0 / Paperclip / nginx send_file无法处理大型PDF

时间:2014-05-01 19:27:54

标签: ruby-on-rails pdf nginx paperclip

我有一个运行nginx的Rails 4.1.0应用程序,托管在Engineyard上。我对send_file方法(也尝试过send_data)和pdf文件有一些令人费解的问题。

设置:

在我的控制器中:

send_file path, type: asset_content_type, disposition: 'inline', filename: filename

我已经使用logger确认上述行中的所有变量都是正确的。我在相关环境的配置中取消注释了这一行:

config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx

这是模型上的回形针设置:

class Asset < ActiveRecord::Base

  belongs_to :attachable, polymorphic: true

  has_attached_file :asset,
    styles: lambda { |i| i.instance.attachable_styles },
    path:   ':rails_root/private/system/:attachment/:id_partition/:style/:filename',
    url:    '/files/:id/disposition/:style/:hash.:extension',
    preserve_files: true

  validates_attachment_content_type :asset, :content_type => /.*/

症状:

  • 在本地运行POW或webrick时没有任何问题。
  • 随着应用程序远程运行,下载任何大小的任何类型的图像文件都能正常工作。
  • 下载pdf~140KB或更低版本可正常工作。
  • 下载比这更大的pdf,我得到文件的一小部分。说我有一个1MB的PDF格式。我下载它,最终得到一个大约140KB的损坏文件。
  • 我已确认磁盘上的文件正常。我可以将相同的大pdf scp到我的本地机器,并且pdf很好。
  • 数据库中的回形针记录正常。

也许它是一个我忽略的nginx配置问题?

编辑:pdf的东西是红鲱鱼。似乎所有大文件都只是部分发送。

1 个答案:

答案 0 :(得分:0)

安永的支持让我一臂之力。以下是他们解决问题的步骤:

  • 注意到nginx引用的目录似乎与/ var / tmp / nginx / proxy中的内容不匹配。
  • 删除了/ var / log / nginx / proxy中的所有临时文件夹,然后重新启动了nginx。

现在它有效。