【问题标题】:Rails 4.1.0/Paperclip/nginx send_file not working with large PDFsRails 4.1.0/Paperclip/nginx send_file 不适用于大型 PDF
【发布时间】:2014-05-07 04:59:07
【问题描述】:

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

设置:

在我的控制器中:

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 完全没有问题。
  • 在应用程序远程运行的情况下,下载任何类型的任何大小的图像文件都可以正常工作。
  • 下载 pdfs ~ 140KB 或更少可以正常工作。
  • 下载比这更大的 pdf,我得到文件的一小部分。假设我有一个 1MB 的 pdf。我下载它,最终得到一个大约 140KB 的损坏文件。
  • 我已经确认磁盘上的文件没有问题。我可以将相同的大 pdf scp 到我的本地机器,并且 pdf 很好。
  • 数据库中的回形针记录正常。

也许这是我忽略的 nginx 配置问题?

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

【问题讨论】:

  • nginx.conf,找到这样一行。您可能需要增加值:client_max_body_size 4G;
  • client_max_body_size 设置为 100M。尝试提升它 - 没有变化。
  • 好的,你可能还需要检查你的 nginx 日志

标签: ruby-on-rails pdf nginx paperclip


【解决方案1】:

安永的支持帮助了我。以下是他们解决问题所遵循的步骤:

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

现在可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-05
    • 2012-02-07
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 2021-09-14
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多