2015-04-23 61 views
0

我需要構建和導出相當複雜的XLS表。爲此,我正在關注RailsCast Exporting CSV and Excel教程。對於表格的小樣本,它的工作很完美,但是當我嘗試導出大約21 000個單元格的整個表格時,花費的時間太長。 Heroku投擲:如何用Rails導出大型XLS

應用程序錯誤應用程序中發生錯誤,並且您的頁面 無法投放。請稍後重試。

如果您是應用程序所有者,請查看您的日誌以瞭解詳細信息。

但在日誌是看到了4分多鐘,但最終完成:

2015-04-23T12:05:18.069312 + 00:00的Heroku [路由器]:在=錯誤代碼= H12 desc =「請求超時」
2015-04-23T12:09:14.876148 + 00:00 app [web.1]:Rendering market_prices/index.xls.erb(266788.6ms)
2015-04 -23T12:09:14.876474 + 00:00 app [web.1]:已完成200 OK 266805ms(查看:62681.2ms | ActiveRecord:204120.4ms)

有沒有辦法加快進程或將任務以某種方式置於「後臺」,以便在完成創建時下載文件?

回答

2

這裏有幾個項目:

沒有任何代碼,很難確定問題出在哪裏。這聽起來像是一個可能的N + 1查詢(你沒有使用預加載和急切的加載關聯),急切的加載關聯一次加載多條記錄,而不是一次請求一條記錄。通常當你發出請求時,如果你看到一堵牆。在開發的文字記錄,你有N + 1個查詢子彈寶石有助於該

這裏是一個快速的教程:

http://blog.arkency.com/2013/12/rails4-preloading/

如果你擁有的一切預緊/渴望加載看看這個:

我會看看AXLSX Gem with crispychic ken的響應,它允許您在類上構建XLS/XLSX表的方法,甚至可以將它作爲自己的對象,而不是erb。我已經爲我需要excel的情況做了這個。要完成下載,用戶必須手動執行此操作,或者可以將其通過電子郵件發送給用戶。我建議通過電子郵件將其發送給用戶,使其不在您的公共文件夾中,全世界都可以看到。

如果您不想發送電子郵件,您可以使用send_file,它不會在您的公共文件夾中。它會要求用戶下載它。 typicall我在我的tmp目錄中創建一個報告文件夾來存儲這些文件,直到它們被髮送下載。