2013-06-20 46 views
2

我想使用Celery來實現一個任務隊列來執行長時間(ish)運行任務,如與外部API交互(例如用於SMS發送的Twilio)。但是,我在生產和開發中使用不同的API憑據。如何在生產和開發中靜態配置Celery應用程序?

我無法弄清楚如何靜態配置芹菜(即從命令行)傳遞適當的API憑證。相關的,如果我的應用程序代碼(啓動Celery任務)指定哪個Celery隊列可以與開發隊列和生產隊列交談?

感謝您提供任何幫助。 Avi

編輯:如何使用芹菜的--config選項的工作示例的額外獎金。

回答

3

我這樣做的方式是使用環境變量。舉一個簡單的例子...

# By convention, my configuration files are in a "configs/XXX.ini" file, with 
# XXX being the configuration name (e.g., "staging.ini") 
config_filename = os.path.join('configs', os.environ['CELERY_CONFIG'] + '.ini') 
configuration = read_config_file(config_filename) 

# Now you can create the Celery object using your configuration... 
celery = Celery('mymodule', broker=configuration['CELERY_BROKER_URL']) 

@celery.task 
def add_stuff(x, y): 
    .... 

你最終會從像這樣的命令行中運行...

export CELERY_CONFIG=staging 
celery -A mymodule worker 

This question有做這樣的事情的一個例子,但他們說:「怎麼能我以一種不那麼難看的方式做到這一點?「就我而言,這是完全可以接受的,而不是「醜陋」。

+0

謝謝!還有兩個問題:(1)我如何通過非芹菜配置(例如我的Twilio憑證)。 (2)我注意到現在還有一個用於芹菜的--config命令行選項。但是,我無法弄清楚如何將任務發送給以這種方式配置的工作人員。有誰知道這是怎麼做到的嗎? –

+1

1.)你可以做與上面顯示的完全相同的東西。這不是芹菜專用的。創建一個環境變量,python查看變量並以這種方式進行配置。你如何構造你的配置完全取決於你。 2.)不知道。也許問一個關於「如何使用--config參數」的問題? –

+0

發佈了一個關於--config的問題http://stackoverflow.com/questions/17241308/celery-how-to-use-the-config-option希望有人知道 –

0

根據twelve factor app,您應該使用環境變量而不是命令行參數。

此,如果您使用的是PaaS的像Heroku的,而且是特別真實的:

  • 有助於保持配置了VCS
  • 容易CI,儀器儀表和自動化部署。

你可能想看看Python Deployment Anti-patterns

相關問題