我有一個在Heroku上運行的Rails應用程序。我試圖添加一項功能,讓用戶以CSV格式下載一些數據。 CSV文件很大(〜1-2 MB),並且生成速度很慢。所以爲了不綁定我的網絡dynos,我將這些下載請求傳遞給工人dynos(使用Resque),並在那裏組裝CSV。我的工作人員看起來像這樣。如何從Resque工作人員向客戶端發送數據?
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
任何人都可以提供建議的最佳方式進行?謝謝。
只需使用Paperclip上傳,如果它被配置爲上傳到S3,那麼它也應該保存對數據庫文件的引用。我試過這種方式,就像一個魅力 –
呵呵。涼。我從來沒有聽說過回形針。我會研究它。 –