2014-12-02 17 views
2

因此,我有一個Web服務(flask + MySQL +芹菜),我試圖找出將Elastic Beanstalk部署到單獨的Web服務器和Worker環境/層中的正確方法。我目前通過在Web服務器的同一實例上啓動worker(使用this answer)工作,但顯然我想讓工作人員在單獨的自動縮放環境中運行。請注意,芹菜任務依賴主服務器代碼(例如,進行查詢等),因此它們不能分開。基本上它是一個有兩個入口點的應用程序。將相同的應用程序/代碼部署到Elastic Beanstalk服務器和工作環境的正確方法是什麼?

我認爲這樣做的唯一方法是讓代碼/配置腳本檢查一些env變量(例如ENV_TYPE =「worker」或「server」)以確定是否啓動標準燒瓶應用程序,或者芹菜工人。 另一個需要注意的是,當我希望/期望它們被同時部署時,我將不得不將我的代碼「部署」到兩個單獨的環境(服務器和工作者),因爲它們都使用相同的代碼庫。

道歉,如果這之前已經問過,但我已經環顧了很多,並找不到任何東西,我覺得很驚訝,因爲這似乎是一個常見的用例。

編輯:剛剛發現this答案,其中涉及我關心的部署兩次(我想這是技術上的部署一次,然後更新兩個環境中,輕鬆地進行腳本)。但是關於如何將應用程序引導到服務器與工作者模式的問題仍然存在。

+0

您是如何最終完成部署的?同時部署到兩個環境?您是否爲您的芹菜工作者使用了Web服務器或工人? – user541905 2015-10-14 04:42:56

+0

我不喜歡這個解決方案有多糟糕,現在我的應用程序的性能要求非常低,所以我只是繼續沿着主流程運行工作人員。對不起,我知道這可能沒有幫助 – Ian 2015-10-14 23:26:26

回答

2

關於引導,如果您爲Elastic Beanstalk環境(docs here)設置了環境變量,那麼當您使用腳本重新部署代碼時,再也不必再觸摸它。如果您創建新環境,則只需添加環境變量。

因此,啓動時,您可以在Python中檢查該ENV變量,然後從那裏引導並加載所需內容。

我的偏好是通過指定「worker」或「server」來創建enum,只需爲env變量(如ENV_WORKER=1或其他)執行一個布爾值。它將消除輸入錯誤的可能性,並且更易於閱讀。

if os.environ.get('ENV_WORKER') is not None: 
    # Bootstrap worker stuff here 
else: 
    # Specific stuff for server here 
+0

好的,謝謝,這就是我的想法。只是想確定這是最佳做法。 – Ian 2014-12-02 21:01:54

相關問題