簡體   English   中英

Nginx Django 和 Gunicorn。 Gunicorn 襪子文件丟失?

[英]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 在被暴發戶運行時遇到了問題,要么從未啟動並運行或關閉。 以下是一些可以幫助您獲取更多信息以追蹤問題的步驟:

  • 就我而言,當發生這種情況時,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 錯誤日志中找到某些內容。 一些可能出錯的事情:

    • django 錯誤(可能是加載設置模塊的問題?)。 確保您的 wsgi.py 正在引用服務器上適當的設置模塊。
    • 新貴腳本中的空格問題。 我有一個標簽隱藏在空間中,可以把事情搞砸。
    • 用戶/權限問題。 最后,我能夠在命令行上以 root 身份運行 gunicorn,但不能通過 upstart 配置以非 root 用戶身份運行。

希望有幫助。 追蹤這些東西花了好幾天。

在遵循 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; 博士

  1. Sudo 刪除運行文件夾。
  2. 在沒有 sudo 權限的情況下重新創建它。
  3. 再次運行 Gunicorn。
  4. ???
  5. 利潤

當您沒有 pip 安裝需求時,也可能出現該錯誤。 就我而言,查看 gunicorn 錯誤日志,發現缺少模塊。 通常發生在您忘記 pip install 新要求時。

好吧,我在這個問題上工作了一個多星期,終於能夠弄清楚了。 請關注來自數字海洋的鏈接,但他們沒有指出重要的問題,其中包括

  1. 連接到上游時沒有實時上游
  2. *4 connect() to unix:/myproject.sock 連接到上游時失敗(13:權限被拒絕)
  3. gunicorn OSError: [Errno 1] 不允許操作
  4. *1 connect() to unix:/tmp/myproject.sock failed (2: No such file or directory)

    等等。

這些問題基本上是 Nginx 和 Gunicorn 之間連接的權限問題 為簡單起見,我建議您創建的每個文件/項目/python 程序授予相同的 nginx 權限

要解決所有問題,請遵循以下方法:首先是:

  1. 以root用戶登錄系統
  2. 創建 /home/nginx 目錄。
  3. 執行此操作后,按照網站進行操作,直到創建新貴腳本。
  4. 運行 chown -R nginx:nginx /home/nginx
  5. 對於 upstart 腳本,請在最后一行進行以下更改: exec gunicorn --workers 3 --bind unix:myproject.sock -u nginx -g nginx wsgi DONT ADD -m 權限,因為它弄亂了套接字。 從 Gunicorn 的文檔中,當 -m 為默認值時,python 會找出最佳權限
  6. 啟動新貴腳本
  7. 現在只需轉到 /etc/nginx/nginx.conf 文件。 轉到服務器模塊並附加:

    位置 / { 包括 proxy_params; proxy_pass http<>:<>//unix:/home/nginx/myproject.sock; } REMOVE <>從這里開始不要關注digitalocean aricle

    1. 現在重新啟動 nginx 服務器,您就可以開始了。

我遇到了同樣的問題,發現我已經在 gunicorn 腳本中將 DJANGO_SETTINGS_MODULE 設置為生產設置,而 wsgi 設置正在使用 dev。

我將 DJANGO_SETTINGS_MODULE 指向了 dev 並且一切正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM