2013-08-16 40 views
9

我想設置sidekiq,以便它可以在我的rails應用程序的單獨主機上運行,​​以避免在運行內存密集型後臺任務時對Web服務器進行權衡。是否可以在rails主機的單獨主機上運行sidekiq?

我需要看什麼配置細節?

是否有已知的最佳實踐或配置?

編輯:

爲了澄清,我的意思是要問什麼,我怎麼配置的軌道,使sidekiq API調用(MyWorker.perform_async)將運行如果sidekiq過程不在本地運行?

+0

你有沒有通過[這篇關於Sidekiq的Github頁面的wiki](https://github.com/mperham/sidekiq/wiki/Advanced-Options)? – Kashyap

+0

是的,但我找不到任何與我所問的相關的東西。如果我錯了,請糾正我。 – Ovesh

回答

13

編輯澄清

一切之前,你應該明白,當你運行perform_async,它只是堅持喬布斯成Redis的隊列。 Sidekiq觀察這個隊列並在他們進入時運行作業。因此,只要您的應用程序和Sidekiq正在查看相同的Redis服務器(當然是同一個數據庫),事情就會起作用。

原來的答覆

首先,正如你可能已經猜到了,它需要你的代碼的副本結賬,以便它可以運行。沒什麼大不了。其次,它需要訪問你的數據庫和redis服務器在另一個盒子上。這意味着確保這些端口在另一臺服務器上打開。這可能會變得棘手,你最好不要那些暴露於開放互聯網的人。通常,對於多盒設置,您只有一個盒子暴露於開放的互聯網。它與你的箱子在專用IP地址的其餘部分通信:

公共Web服務器

運行的Apache/Nginx的,也許你的應用服務器。

專用應用程序服務器(S)(可選)

運行你的應用程序服務器,如果他們沒有在公共服務器上運行。連接到您的數據庫和Redis服務器。

私人Sidekiq服務器(S)(可選)

運行Sidekiq。連接到您的數據庫和Redis服務器。

專用數據庫/服務器的Redis

運行數據庫和Redis的。當然,如果需要的話,他們可以拆分到不同的服務器。

+0

我想我的問題是,當你調用'MyWorker.perform_async'時,如果sidekiq不在本地運行,它將如何工作?這是如何配置的? – Ovesh

+0

它的配置如上所述。將Sidekiq指向Redis正在運行的任何主機(而不是「localhost:6379」)。這真的沒什麼不同。 – bioneuralnet

+2

換言之:不是在本地啓動Sidekiq,而是創建了另一個主機,安裝了您的Rails應用程序,將它的DB和Redis配置指向您的原始服務器,然後啓動了Sidekiq。完成了,所有這些都改變了。 – bioneuralnet

相關問題