0

django-celery のデモ アプリケーションを dotcloud で動作させるのに苦労しています。http://docs.dotcloud.com/0.9/tutorials/python/django-celery/のチュートリアルを見ましたが、あまり役に立ちません。

サンプル アプリケーションは Django 1.4 アプリです。理由はわかりませんが、デプロイされたアプリケーションに移動すると、インデックス ページではなく、ユーザー名とパスワードのポップアップが表示されます。ポップアップのメッセージは

TheDomain のサーバーには、ユーザー名とパスワードが必要です。サーバーは言う:RabbitMQ管理。

この動作が追加された理由を知っている人はいますか?

django-celery サンプル アプリとの違いは次のとおりです。

# Django settings for project in settings.py

import os
import json
import djcelery

# Load the dotCloud environment
with open('/home/dotcloud/environment.json') as f:
  dotcloud_env = json.load(f)

# Configure Celery using the RabbitMQ credentials found in the dotCloud
# environment.
djcelery.setup_loader()
BROKER_HOST = dotcloud_env['DOTCLOUD_BROKER_AMQP_HOST']
BROKER_PORT = int(dotcloud_env['DOTCLOUD_BROKER_AMQP_PORT'])
BROKER_USER = dotcloud_env['DOTCLOUD_BROKER_AMQP_LOGIN']
BROKER_PASSWORD = dotcloud_env['DOTCLOUD_BROKER_AMQP_PASSWORD']
BROKER_VHOST = '/'

アプリのデータベース設定の代わりに - データベース設定をに置き換えました。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'template1',
        'USER': dotcloud_env['DOTCLOUD_DB_SQL_LOGIN'],
        'PASSWORD': dotcloud_env['DOTCLOUD_DB_SQL_PASSWORD'],
        'HOST': dotcloud_env['DOTCLOUD_DB_SQL_HOST'],
        'PORT': int(dotcloud_env['DOTCLOUD_DB_SQL_PORT']),
    }
}

私はrequirements.txtファイルも追加しました

Django==1.4
django-celery
setproctitle

および dotcloud.yml ファイル

www:
    type: python

broker:
    type: rabbitmq

workers:
    type: python-worker

db:
    type: postgresql

および Supervisor.conf

[program:djcelery]
directory = $HOME/current/
command = python manage.py celeryd -E -l info -c 2
stderr_logfile = /var/log/supervisor/%(program_name)s_error.log
stdout_logfile = /var/log/supervisor/%(program_name)s.log

[program:celerycam]
directory = $HOME/current/
command = python manage.py celerycam
stderr_logfile = /var/log/supervisor/%(program_name)s_error.log
stdout_logfile = /var/log/supervisor/%(program_name)s.log

そして、私が追加したpostinstallファイルに

dotcloud_get_env() {
    sed -n "/$1/ s/.*: \"\(.*\)\".*/\1/p" < "$HOME/environment.json"
}

setup_django_celery() {
    cat > $HOME/current/supervisord.conf << EOF
[program:djcelery]
directory = $HOME/current/
command = python manage.py celeryd -E -l info -c 2
stderr_logfile = /var/log/supervisor/%(program_name)s_error.log
stdout_logfile = /var/log/supervisor/%(program_name)s.log

[program:celerycam]
directory = $HOME/current/
command = python manage.py celerycam
stderr_logfile = /var/log/supervisor/%(program_name)s_error.log
stdout_logfile = /var/log/supervisor/%(program_name)s.log
EOF
}

if [ `dotcloud_get_env SERVICE_NAME` = workers ] ; then
    setup_django_celery
fi

最後の fi が追加されましたが、dotcloud チュートリアルにはありません。

編集

この例でレポをまとめました。これが機能する場合、他の人にとって非常に役立つはずです。https://github.com/asunwatcher/django-celery-dotcloudで入手できます。

4

1 に答える 1

1

これは、CLIのエラーのように見えます。試してみるdotcloud urlと、アプリケーションに2つのURLがありwwwます。1つはサービス用で、もう1つはrabbit管理インターフェイスであるrabbitMQ用です。dotCloud環境で指定されたrabbitユーザー名とパスワードを使用してそこにログインできます。

何らかの理由で、プッシュの最後に表示するために間違ったものを選択しています。あなたのサービスのURLはあなたwwwが望むものです。

于 2013-02-04T23:44:10.903 に答える