2016-09-29 8 views
1

私の開発サーバーと本番サーバーの両方でvirtualenvを使用して同じサーバーを使用しています。セロリを開発および生産用に分離する

私の問題はセロリがタスクを実行するプロジェクトを知らないことです。私は自分の開発サーバーで稼働している本番からのタスクを望んでいません。

私は別のブローカーのアドレスを使用しようとしましたが、それは正しく動作しません:生産のための

スーパーバイザスクリプト:

[program:production-celery] 
command=/home/user/.virtualenvs/production.site.com/bin/celery --app=myproject.celeryconfig:app worker -E -n production --loglevel=INFO --without-mingle --without-gossip -Q default,celery 

directory = /home/user/.virtualenvs/production.site.com/myproject 
environment=DJANGO_SETTINGS_MODULE='myproject.settings.production' 

開発:

[program:development-celery] 
command=/home/user/.virtualenvs/development.site.com/bin/celery --app=myproject.celeryconfig:app worker -E -n development --loglevel=INFO --without-mingle --without-gossip -Q default,celery 

directory = /home/user/.virtualenvs/development.site.com/myproject 
environment=DJANGO_SETTINGS_MODULE='myproject.settings.development' 

生産celeryconfig:

import os 
from celery import Celery 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.production') 

app = Celery('myproject', broker='amqp://', backend='amqp') 
app.config_from_object('django.conf:settings') 
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 


app.conf.update(
    CELERY_ACCEPT_CONTENT = ['pickle', 'json'], 
    CELERY_TIMEZONE='Europe/Oslo', 
    CELERY_ENABLE_UTC=True, 
    CELERYBEAT_SCHEDULER = 'djcelery.schedulers.DatabaseScheduler', 
    CELERY_SEND_TASK_ERROR_EMAILS = True, 
    CELERY_SEND_ERROR_EMAILS = True, 
    CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True, 
    CELERY_IGNORE_RESULT = False, 
    CELERY_TASK_RESULT_EXPIRES = 172800, 
) 

開発celeryconfig:生産からタスクは、開発上で実行されるだろう、なぜ

import os 
from celery import Celery 

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings.development') 
app = Celery('myproject', broker='amqp://development:[email protected]/development') 
app.config_from_object('django.conf:settings') 

app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) 


app.conf.update(
    CELERY_ACCEPT_CONTENT = ['pickle', 'json'], 
    CELERY_TIMEZONE='Europe/Oslo', 
    CELERY_ENABLE_UTC=True, 
    CELERY_SEND_TASK_ERROR_EMAILS = False, 
    CELERY_STORE_ERRORS_EVEN_IF_IGNORED = True, 
    CELERY_IGNORE_RESULT = False, 
) 

誰でも知っていますか?

+0

セロリの両方の作業者に同じディレクトリを使用しているので、本番用と開発用の両方のインスタンスが同じコードベースを使用しているかのように見えます。これは意図されていますか?実動サーバーと同じコードベースを使用する開発サーバーは、実際に目的を果たしていないか、または私が見落としている特別なケースがありますか? – Tim

答えて

1

TL; DR

開発者とプロダクションサーバーはできるだけ早く分離してください。

全回答

同じサーバー上のDEVと生産の両方を持つことは多くの問題を引き起こす可能性があります。

発生する可能性のあるエッジケースを処理するコードをコーディングすると、多くの時間を費やすことになります。たとえば、devにはテストする新しい機能があるかもしれませんが、バグがあり、メモリの問題があります - あなたの生産が傷つくかもしれません。

もう1つのことは、rabbitMQのような使用しているサードパーティのサービスです。あなたは別のキューを定義しようとしましたが、問題があり、それを維持するためにコードを書く必要があります(def make_sure_new_feature_not_deleteing_users_on_prudction())。これは、新しいポートレット/ URL /キューを設定する必要がある新しい(redis、memcache、sentryなど)を再生するたびに発生する可能性があります。

最高の解決策は、 ほぼ)は、異なるマシン上で同じ構成です。

関連する問題