我正试图在AWS EC2上的Ubuntu实例上运行我的django服务器。我正在使用gunicorn来运行这样的服务器:
gunicorn --workers 4 --bind 127.0.0.1:8000 woc.wsgi:application --name woc-server --log-level=info --worker-class=tornado --timeout=90 --graceful-timeout=10
当我提出请求时,我会收到502,浏览器上的坏网关。这是服务器日志http://pastebin.com/Ej5KWrWs
settings.py文件中根据主机名更改行为的部分是
iUbuntu是我的笔记本电脑的主机名
if socket.gethostname() == 'iUbuntu':
'''
Development mode
"iUbuntu" is the hostname of Ishan's PC
'''
DEBUG = TEMPLATE_DEBUG = True
else:
'''
Production mode
Anywhere else than Ishan's PC is considered as production
'''
DEBUG = TEMPLATE_DEBUG = False
if socket.gethostname() == 'iUbuntu':
'''Development'''
ALLOWED_HOSTS = ['*', ]
else:
'''Production Won't let anyone pretend as us'''
ALLOWED_HOSTS = ['domain.com', 'www.domain.com',
'api.domain.com', 'analytics.domain.com',
'ops.domain.com', 'localhost', '127.0.0.1']
if socket.gethostname() == 'iUbuntu':
MAIN_SERVER = 'http://localhost'
else:
MAIN_SERVER = 'http://domain.com'
我搞不清楚这里出了什么问题。同样的代码在我的笔记本电脑上运行得很好。
我还制作了一个小的helloworld node.js,用于8000端口,以测试nginx配置,它运行良好。所以没有nginx错误。
更新:
我将DEBUG设置为True,并复制了Tracebackhttp://pastebin.com/ggFuCmYW
更新:
感谢@ARJMP的回复。这确实是芹菜消费者无法连接到经纪人的问题。
我这样配置芹菜:app.config_from_object('woc.celeryconfig')
和celeryconfig.py的内容是:
BROKER_URL = 'amqp://celeryuser:celerypassword@localhost:5672/MyVHost'
CELERY_RESULT_BACKEND = 'rpc://'
我正在像这样运行工作程序:celery worker -A woc.async -l info --autoreload --include=woc.async -n woc_celery.%h
我得到的错误是:
consumer: Cannot connect to amqp://celeryuser:**@127.0.0.1:5672/MyVHost: [Errno 104] Connection reset by peer.
好吧,据我所知,你的问题是你的芹菜工人无法连接到经纪人。您有一些中间件试图调用芹菜任务,因此它在每次请求时都会失败(除非analyse_urls.delay(**kw)
是有条件的)
我发现了一个类似的问题,通过升级他们的芹菜版本解决了这个问题。
另一个原因可能是EC2实例无法连接到消息队列服务器,因为EC2安全组不允许连接。如果消息队列在单独的服务器上运行,您可能必须确保已允许通过AWS EC2安全小组连接EC2实例和消息队列
尝试将rabbitmq连接超时设置为30秒。这通常可以解决无法连接到服务器的问题。
您可以将connection_timeout
添加到连接字符串:
BROKER_URL = 'amqp://celeryuser:celerypassword@server.example.com:5672/MyVHost?connection_timeout=30'
注意带有问号的格式:?connection_timeout=30
这是RMQ连接字符串的查询字符串参数。
另外-确保url指向生产环境中的生产服务器名称/url,而不是localhost