【发布时间】: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