2016-06-10 73 views
1

我試圖在AWS EC2上的Ubuntu實例上運行我的django服務器。我使用gunicorn運行這樣的服務器:django errno 104由同級重置的連接

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' 

我無法弄清楚這裏有什麼問題。在我的筆記本電腦上使用gunicorn可以運行相同的代碼。

我也做了一個小小的hello world node.js服務於端口8000來測試nginx配置,它運行良好。所以沒有nginx錯誤。

UPDATE:

我DEBUG設置爲True,並複製回溯http://pastebin.com/ggFuCmYW

UPDATE:

多虧了@ARJMP的答覆。這確實是芹菜消費者沒有聯繫到經紀人的問題。這樣

我配置芹菜:app.config_from_object('woc.celeryconfig')和celeryconfig.py的內容是:

BROKER_URL = 'amqp://celeryuser:[email protected]: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.

+0

郵政完整堆棧跟蹤,請 – e4c5

+0

我設置DEBUG爲真,並複製回溯[HTTP:/ /pastebin.com/ggFuCmYW(http://pastebin.com/ggFuCmYW) – Ishan

+0

stacktrace似乎表明您的芹菜工人在連接您的消息隊列(amqp)服務器時遇到問題。 [類似的問題](http://stackoverflow.com/questions/24647309/celery-gives-connection-reset-by-peer)通過升級其芹菜版本來解決。 – ARJMP

回答

0

Ø k所以你的問題,據我所知,你的芹菜工人不能連接到經紀人。你有一些中間件試圖調用芹菜任務,所以它會在每次請求時失敗(除非analyse_urls.delay(**kw)是有條件的)

我發現a similar問題是通過升級它們的芹菜版本解決的。

另一個原因可能是EC2實例無法連接到消息隊列服務器,因爲EC2安全組不會允許它連接到消息隊列服務器。如果消息隊列在單獨的服務器上運行,則可能需要確保已允許EC2實例和消息隊列之間的連接通過AWS EC2 Security Groups

+1

除去芹菜作品的調用,但是我需要芹菜來完成很多任務。我正在像這樣'app.config_from_object('woc.celeryconfig')'配置芹菜,celeryconfig.py的內容是'BROKER_URL ='amqp:// celeryuser:celerypassword @ localhost:5672/MyVHost' CELERY_RESULT_BACKEND ='rpc: //' '我正在運行像這樣的'芹菜工作者-A woc.async -l info --autoreload --include = woc.async -n woc_celery。%h' 而我得到的錯誤是'消費者:無法連接到amqp:// celeryuser:**@127.0.0.1:5672/MyVHost:[Errno 104]通過peer重置連接。 – Ishan

0

嘗試將rabbitmq連接超時設置爲30秒。這通常會清除無法連接到服務器的問題。

您可以添加connection_timeout到連接字符串:

BROKER_URL = 'amqp://celeryuser:[email protected]:5672/MyVHost?connection_timeout=30'

注意到問號格式:?connection_timeout=30

這是a query string parameter for the RMQ connection string

也 - 確保網址指向您的生產服務器名稱/ URL,而不是localhost,在生產環境中

相關問題