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

以及我添加的安装后文件

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 教程中。

编辑

我已经用这个例子拼凑了一个 repo,因为当它工作时它应该对其他人非常有用。它可以在:https ://github.com/asunwatcher/django-celery-dotcloud

4

1 回答 1

1

这看起来像是我们的 CLI 中的错误。尝试一下dotcloud url,你会看到你的应用程序有两个 URL,一个用于你的www服务,一个用于你的 rabbitMQ,它是一个兔子管理接口。您可以使用 dotCloud 环境中提供的 rabbit 用户名和密码登录。

出于某种原因,我们在推送结束时选择了错误的来向您展示。您的服务的 urlwww是您想要的。

于 2013-02-04T23:44:10.903 回答