我在Heroku上运行了一个Rails应用程序。我正在尝试添加一个功能,允许用户以CSV格式下载一些数据。这些CSV文件相对较大(约1-2 MB),生成速度较慢。为了不占用我的Web dynos,我将这些下载请求传递给工作 dynos(使用Resque),并在那里组装CSV文件。我的Resque worker看起来像这样。
class Downloader
def self.perform(ids_to_download)
models = Model.where(:id => ids_to_download)
csv_data_for_client = models.to_csv
end
end
我在思考将csv文件发送回请求它的客户端的最佳方法。
如果这个代码是在Rails控制器中的话,只需使用
send_data csv_data_for_client
即可完成。但是在Resque工作者内部似乎无法使用这种方法。从在SO和互联网上的研究来看,似乎我有几个选择:
- 直接从Resque工作者发送数据(虽然我不确定这是否可能)
- 将数据保存到Heroku文件系统中,在控制器中检索并使用
send_data
发送 - 将数据保存到数据库(PostgreSQL)中,在控制器中检索并使用
send_data
发送