[英]Nginx Django and Gunicorn. Gunicorn sock file is missing?
我有一個基於這個https://github.com/jcalazan/ansible-django-stack的 ansible 配置的 VM,但由於某種原因嘗試啟動 Gunicorn 會出現以下錯誤:
無法連接到 /path/to/my/gunicorn.sock
並在 nginx 日志文件中:
connect() to unix:/path/to/my/gunicorn.sock 在連接到上游時失敗(2:沒有這樣的文件或目錄)
實際上,指定目錄中缺少套接字文件。 我已經檢查了目錄的權限,它們很好。
這是我的 gunicorn_start 腳本:
NAME="{{ application_name }}"
DJANGODIR={{ application_path }}
SOCKFILE={{ virtualenv_path }}/run/gunicorn.sock
USER={{ gunicorn_user }}
GROUP={{ gunicorn_group }}
NUM_WORKERS={{ gunicorn_num_workers }}
# Set this to 0 for unlimited requests. During development, you might want to
# set this to 1 to automatically restart the process on each request (i.e. your
# code will be reloaded on every request).
MAX_REQUESTS={{ gunicorn_max_requests }}
echo "Starting $NAME as `whoami`"
# Activate the virtual environment.
cd $DJANGODIR
. ../../bin/activate
# Set additional environment variables.
. ../../bin/postactivate
# Create the run directory if it doesn't exist.
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Programs meant to be run under supervisor should not daemonize themselves
# (do not use --daemon).
exec gunicorn \
--name $NAME \
--workers $NUM_WORKERS \
--max-requests $MAX_REQUESTS \
--user $USER --group $GROUP \
--log-level debug \
--bind unix:$SOCKFILE \
{{ application_name }}.wsgi
誰能建議還有什么可能導致丟失的套接字文件?
謝謝
好吧,因為我沒有足夠的代表來發表評論,所以我會在這里提到缺失的插座沒有太多的特殊性,但我可以告訴你一些關於我是如何從你的鞋子開始並得到一些東西的工作。
總而言之,gunicorn 在被暴發戶運行時遇到了問題,要么從未啟動並運行或關閉。 以下是一些可以幫助您獲取更多信息以追蹤問題的步驟:
ps auxf | grep gunicorn
ps auxf | grep gunicorn
看看你有沒有工人去。 我沒有。grep init: /var/log/syslog
,向我顯示我的 gunicorn 服務已停止,因為它重新生成太快,盡管我懷疑這會是你的問題,因為你沒有在你的 conf 中重生。 無論如何,您可能會在那里找到一些東西。在看到 gunicorn 無法運行或記錄錯誤后,我決定嘗試從命令行運行它。 轉到您的 manage.py 所在的目錄並針對您的 gunicorn 實例運行您的 upstart 命令的擴展版本。 類似的東西(用適當的文字代替我使用的垃圾替換所有變量。):
/path/to/your/virtualenv/bin/gunicorn --name myapp --workers 4 --max-requests 10 --user appuser --group webusers --log-level debug --error-logfile /somewhere/I/can/find/error.log --bind unix:/tmp/myapp.socket myapp.wsgi
如果幸運的話,您可能會在手動運行該命令后獲得 python 回溯或在您的 gunicorn 錯誤日志中找到某些內容。 一些可能出錯的事情:
希望有幫助。 追蹤這些東西花了好幾天。
在遵循 Michal Karzynski 的偉大指南“ 使用 Nginx、Gunicorn、virtualenv、主管和 PostgreSQL 設置 Django ”之后,我遇到了同樣的問題。
這就是我解決它的方法。
我在用於通過 Supervisor (myapp/bin/gunicorn_start) 啟動 gunicorn 的 bash 腳本中有這個變量:
SOCKFILE={{ myapp absolute path }}/run/gunicorn.sock
其中,當您第一次運行 bash 腳本時,會使用 root 權限創建一個“運行”文件夾和一個 sock 文件。 所以我 sudo 刪除了運行文件夾,然后在沒有 sudo 權限的情況下重新創建它,瞧! 現在,如果您重新運行 Gunicorn 或 Supervisor,您將不再有煩人的丟失 sock 文件錯誤消息!
TL; 博士
當您沒有 pip 安裝需求時,也可能出現該錯誤。 就我而言,查看 gunicorn 錯誤日志,發現缺少模塊。 通常發生在您忘記 pip install 新要求時。
好吧,我在這個問題上工作了一個多星期,終於能夠弄清楚了。 請關注來自數字海洋的鏈接,但他們沒有指出重要的問題,其中包括
*1 connect() to unix:/tmp/myproject.sock failed (2: No such file or directory)
等等。
這些問題基本上是 Nginx 和 Gunicorn 之間連接的權限問題。 為簡單起見,我建議為您創建的每個文件/項目/python 程序授予相同的 nginx 權限。
要解決所有問題,請遵循以下方法:首先是:
現在只需轉到 /etc/nginx/nginx.conf 文件。 轉到服務器模塊並附加:
位置 / { 包括 proxy_params; proxy_pass http<>:<>//unix:/home/nginx/myproject.sock; } REMOVE <>從這里開始不要關注digitalocean aricle
我遇到了同樣的問題,發現我已經在 gunicorn 腳本中將 DJANGO_SETTINGS_MODULE 設置為生產設置,而 wsgi 設置正在使用 dev。
我將 DJANGO_SETTINGS_MODULE 指向了 dev 並且一切正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.