2012-12-06 21 views
7

Kereviz ve diğer şeyleri (örneğin veritabanı) başlatması gereken bir uygulamam var. Uygulama yapılandırmasını içerecek bir .ini dosyasına sahip olmak isterim. Bu, çalışma zamanında uygulamaya geçirilmelidir.Python özellikler kütüğünden Kereviz yapılandırmasını okuyun

development.init:

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

[database] 
# database config 
# ... 

celeryconfig.py:

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

olmadan yapılandırma dosyasında geçmek yine de var mı:

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() 

, arayacağım kereviz başlatmak için Bir ortam değişkeni ayarlamak gibi çirkin bir şey yapmak?

cevap

3

Bir ortam değişkeni nasıl çirkinleştiriliyor? Uygulamanızın geçerli sürümüyle bir ortam değişkeni ayarlarsınız veya ana makine adına dayalı olarak türetebilirsiniz ya da oluşturma/dağıtma sürecinizi dosyanın üzerine yazabilir ve geliştirmede development.ini'nin settings.ini'ye kopyalamasını sağlayabilirsiniz. Genel bir yerde ve prodüksiyonda, production.ini'nin settings.ini'ye kopyalanmasını sağladınız.

Bu seçeneklerden herhangi biri oldukça yaygındır. Dosyayı yerleştirmek için Şef veya Kukla gibi bir yapılandırma yönetim aracı kullanmak iyi bir seçenektir.

+0

hangi Envvarlara alternatif olarak kullanılabilir. – asksol

+1

Çirkin ya da değil, orijinal soruyla aynı şeyi merak ediyordum, ama bu cevap vermemize yardımcı olmuyor. : (@ Asksol'un kurbanı yararlı olsa da) – shazow

5

Pekala, Jordan'ın tavsiyesini aldım ve bir env değişkenini kullandım.

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() 

başlatmak için kereviz: Bu benim celeryconfig.py alacağın şey budur siz de kendi komut satırı argümanları, ekleyebilir (git Master'da, 3.1) bir sonraki versiyonda

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

http://hynek.me/articles/using-celery-with-pyramid/ da Piramit kullanıyorsanız, size yardımcı olan benzer bir örneğe sahiptir. – shazow