2012-12-26 29 views
0

我正在構建一個rails 3.2應用程序,它允許用戶從CSV文件導入聯繫人。如果CSV文件中的任何聯繫人行包含驗證錯誤,則不會導入任何聯繫人,並且會以CSV文件向用戶顯示錯誤。例如,如果聯繫人CSV包含20行,並且4行和15行存在錯誤,則不會導入任何聯繫人,並且CSV的第4行和第15行都會顯示錯誤。從CSV導入大量的聯繫人與Rails 3.2

我已經在時間和「構建」讀取每一行中的陣列記錄使用「Contact.new」完成此功能。如果錯誤不存在,我通過迭代陣列來保存所有聯繫人,否則顯示錯誤。

如果行數增加到40,那麼大約需要20分鐘才能導入錯誤的聯繫人。有沒有辦法提高其性能?

更新: 我有這個應用程序部署在Heroku與獨角獸。如果我導入這個包含40個聯繫人的CSV,則應用程序在30秒後崩潰,但所有聯繫人都已導入。以下是導致應用程序崩潰的日誌:

2012-12-26T15:40:28+00:00 app[web.1]: E, [2012-12-26T15:40:27.233802 #2] ERROR -- : worker=0 PID:54 timeout (31s > 30s), killing 
2012-12-26T15:40:29+00:00 app[web.1]: E, [2012-12-26T15:40:29.724725 #2] ERROR -- : reaped #<Process::Status: pid 54 SIGKILL (signal 9)> worker=0 
2012-12-26T15:40:32+00:00 app[web.1]: Disconnected from ActiveRecord 
2012-12-26T15:40:33+00:00 app[web.1]: Disconnected from Redis 

對此有何看法?

回答

1

這是一個錯字還是你真的說從一個CSV文件導入40條記錄需要20分鐘?如果是這種情況,那麼您的設置存在嚴重問題。或者你的「聯繫人」必須有一個bazillion數據字段和驗證或什麼:/

至於heroku ... heroku會在30秒後超時。它這樣做是爲了防止失控的Web請求。他們的正式答案是將其轉移到後臺工作並在那裏處理。

+0

開發模式需要20分鐘。在heroku大約需要。 30-35sec。是的,隨着保存聯繫人,它保存了他們的地址,電子郵件和電話號碼,都是不同的模式。 我會盡量保存後臺作業中的所有細節。謝謝 – varunvlalan

+0

它超時與Unicorn有什麼關係? – varunvlalan

+0

即使在開發模式下也不需要20分鐘。即使與相關的模型,似乎超過每個模型的第二個仍然很慢...至於獨角獸..不知道。這是一個英雄的事情。如果您需要更多詳細信息,請在他們的幫助指南/支持部分中記錄它 –

0

您可以通過塊導入聯繫人並在保存之前驗證每條記錄。 看看smarter_csv,它允許CSV文件的塊和並行處理。