【发布时间】:2018-05-15 16:50:29
【问题描述】:
我在 nginx/unicorn 上有一个带有这行代码的 rails 应用程序:
format.csv { send_data Test_Model.to_csv, stream: 'true', filename: "assets-#{DateTime.now.strftime('%Y%m%d%H%M%S')}.csv" }
问题是 - 我的 to_csv 方法生成的文件偏大,2.4 MB - 我的应用程序通过 sql 查询生成它也需要很长时间...而那种长久是我无法改变的。
那么,90% 的时间我都会调用我的功能:
也许 10 次中有 1 次,我确实让文件出来了。但重点是……生成它并通过 send_data 发送它会有很大的用处。
我知道有关于 send_file 的讨论。但是, send_file 需要一个已生成文件的文件路径。在这种情况下,我想用 send_data 动态创建这些数据。如果可能的话,我真的很想将此文件从 send_data 中推出 - 即使我的应用程序需要超过 30 秒以上的时间来生成文件。
更新
所以我的应用程序有点“超时”并在 30 秒时咬住灰尘。听起来很像某个地方的超时设置。我想知道 - send_data 超时会在 unicorn conf 中设置,还是在通用 rails conf 中设置? 如何操作与 send_data 关联的超时?
【问题讨论】:
-
我认为发送更大的文件没有任何问题(而且 2.4 MB 并不是那么大)。你用什么服务器?你能用
curl -I http://yourpath测试它并发布输出吗?来自浏览器的一般网络错误可以掩盖问题 -
生成csv数据需要多长时间?
-
@23tux 生成需要几秒钟。大约 15-30 秒。
-
@23tux 啊 - 快速检查发现我的应用程序在 30 秒处超时。这是一个独角兽应用程序......也许有配置相关?我想知道那个配置网络服务器或 Rails 项目是否相关?我将在主线程中包含该问题,以及标记独角兽
-
您的环境/服务器设置是什么?它是在开发模式还是生产模式下失败?
标签: ruby-on-rails ruby nginx unicorn