2017-02-15 44 views
0

我有需要在後臺(滑軌5.0.1)下面的命令 -守護VS亞軍VS Rake任務VS主動工作

  1. 執行的任務的列表下載一個zip文件
  2. 從中提取XML文件(平均大小約400 MB)
  3. 解析(XML引入nokogiri讀者::)對符合一定的約束,如果發現,將它們添加到數據庫中記錄的xml文件(Postgres的)
  4. 找回一些來自數據庫的電子郵件地址併發送給他們電子郵件

這需要每天完成,無需任何人工輸入。現在,我正在使用Rails runner來完成所有這些工作,並使用cron('Whenever'gem)安排它。所以,正在使用'轉輪'正確的方法?有沒有一個減少內存密集方法我可以使用,因爲前端(管理面板)將不會被訪問太多?積極的工作,耙子,守護進程等如何?

+0

無論您如何安排工作,解析XML都將成爲瓶頸。如果您想要更少的內存密集型方法,那麼嘗試找到不涉及將400mb XML文件解析到內存中的內容。 – max

+0

@max我目前正在使用Nokogiri xml讀取器,它不會將xml加載到內存中,而是依次讀取行,解析節點。有更好的解決方案嗎?也許分裂的XML文件? – rohank

回答

1

。 rake任務只是通過rake管理工具執行的命名空間內的一堆代碼

runner以非交互方式在Rails的上下文中運行Ruby代碼

。另一方面守護進程是完全不同的東西比這兩個,你可以在這裏檢查更多關於它:http://daemons.rubyforge.org/

爲你的情況最好使用耙子,因爲它不啓動rails「除非你做到」(亞軍有啓動導軌)。

另一件事是耙是單線程的,所以如果你想單個任務有效地完成,你可以使用耙,如果你有多個任務,你可以使用像Sidekiq,Resque和延遲作業的工人和工具

+0

但是,當xml文件被解析時,它正在用新記錄更新數據庫。那麼,是不是,如果我使用rake,我將不得不引導rails(生產環境)呢?我如何使用可用於更新的模型使用耙子? – rohank

+0

我不知道你的確切用例,你可能需要啓動Rails,但是你也可以保留所有需要在單獨作業中更新的記錄(通過延遲作業或Sidekiq)。所以你的耙子任務只需要解析的時間。而排隊的工作只需要進行解析 – amrdruid