2012-12-06 25 views
7

मेरे पास एक ऐसा एप्लिकेशन है जिसे सेलेरी और अन्य चीजों को प्रारंभ करने की आवश्यकता है (उदा। डेटाबेस)। मैं एक .ini फ़ाइल रखना चाहता हूं जिसमें अनुप्रयोग कॉन्फ़िगरेशन होगा। इसे रनटाइम पर एप्लिकेशन को पास किया जाना चाहिए।पायथन गुण फ़ाइल से सेलेरी कॉन्फ़िगरेशन पढ़ें

development.init:

[celery] 
broker=amqp://localhost/ 
backend=amqp://localhost/ 
task.result.expires=3600 

[database] 
# database config 
# ... 

celeryconfig.py:

from celery import Celery 
import ConfigParser 

config = ConfigParser.RawConfigParser() 
config.read(...) # Pass this from the command line somehow 

celery = Celery('myproject.celery', 
       broker=config.get('celery', 'broker'), 
       backend=config.get('celery', 'backend'), 
       include=['myproject.tasks']) 

# Optional configuration, see the application user guide. 
celery.conf.update(
    CELERY_TASK_RESULT_EXPIRES=config.getint('celery', 'task.result.expires') 
) 

# Initialize database, etc. 

if __name__ == '__main__': 
    celery.start() 

अजवाइन शुरू करने के लिए, मैं फोन:

celery worker --app=myproject.celeryconfig -l info 

वहाँ बिना कॉन्फ़िग फ़ाइल में पारित करने के लिए है वैसे भी पर्यावरण चर सेट करने की तरह कुछ बदसूरत कर रहे हैं?

उत्तर

3

पर्यावरण परिवर्तनीय बदसूरत कैसे स्थापित कर रहा है? आप या तो अपने एप्लिकेशन के वर्तमान संस्करण के साथ एक पर्यावरण परिवर्तक सेट करते हैं, या आप इसे होस्टनाम के आधार पर प्राप्त कर सकते हैं, या आप अपनी बिल्ड/तैनाती प्रक्रिया फ़ाइल को ओवरराइट कर सकते हैं, और विकास पर आप development.ini को settings.ini पर कॉपी कर सकते हैं। एक सामान्य स्थान पर, और उत्पादन पर आप production.ini को settings.ini पर कॉपी करते हैं।

इनमें से कोई भी विकल्प काफी आम है। फ़ाइल को रखने के लिए शेफ या कठपुतली जैसे कॉन्फ़िगरेशन प्रबंधन टूल का उपयोग करना एक अच्छा विकल्प है।

+0

अगले संस्करण में आप भी अपने खुद के कमांड लाइन तर्क, जोड़ सकते हैं जो envvars के विकल्प के रूप में इस्तेमाल किया जा सकता है। – asksol

+1

बदसूरत या नहीं, मैं मूल प्रश्न के समान ही सोच रहा था, लेकिन इससे इसका उत्तर देने में मदद नहीं मिलती है। :(हालांकि @ askol की लीड सहायक है। – shazow

5

ठीक है, मैंने जॉर्डन की सलाह ली और एक env चर का उपयोग किया। अजवाइन

celery import Celery 
import os 
import sys 
import ConfigParser 

CELERY_CONFIG = 'CELERY_CONFIG' 

if not CELERY_CONFIG in os.environ: 
    sys.stderr.write('Missing env variable "%s"\n\n' % CELERY_CONFIG) 
    sys.exit(2) 

configfile = os.environ['CELERY_CONFIG'] 

if not os.path.isfile(configfile): 
    sys.stderr.write('Can\'t read file: "%s"\n\n' % configfile) 
    sys.exit(2) 

config = ConfigParser.RawConfigParser() 
config.read(configfile) 

celery = Celery('myproject.celery', 
       broker=config.get('celery', 'broker'), 
       backend=config.get('celery', 'backend'), 
       include=['myproject.tasks']) 

# Optional configuration, see the application user guide. 
celery.conf.update(
    CELERY_TASK_RESULT_EXPIRES=config.getint('celery', 'task.result.expires'), 
) 

if __name__ == '__main__': 
    celery.start() 

शुरू करने के लिए:: यह है कि मैं क्या celeryconfig.py में मिलता है (Git मास्टर में 3.1,)

$ export CELERY_CONFIG=development.ini 
$ celery worker --app=myproject.celeryconfig -l info 
+0

http://hynek.me/articles/using-celery-with-pyramid/ में एक समान उदाहरण भी है जो उपयोगी है यदि आप पिरामिड का उपयोग कर रहे हैं। – shazow

संबंधित मुद्दे