ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – django gunicorn sock文件不是由wsgi创建的

2019-10-08 02:55:40  阅读:207  来源: 互联网

标签:python nginx django gunicorn


我在我的数字海洋服务器(Ubuntu 16.04)中有一个基本的django休息应用程序,它具有本地虚拟环境.
基本的wsgi.py是:

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "workout_rest.settings")

# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)

我一步一步地按照本教程:
https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04

当我使用此命令测试Gunicorn为项目提供服务的能力时:
gunicorn –bind 0.0.0.0:8000 myproject.wsgi:application
一切顺利.

所以我试图设置Gunicorn使用systemd服务文件.
我的/etc/systemd/system/gunicorn.service文件是:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ben
Group=www-data
WorkingDirectory=/home/ben/myproject
ExecStart=/home/ben/myproject/myprojectenv/bin/gunicorn --workers 3 --bind unix:/home/ben/myproject/myproject.sock myproject.wsgi:application

[Install]
WantedBy=multi-user.target

我的Nginx配置是:

server {
    listen 8000;
    server_name server_domain_or_IP;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/ben/myproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ben/myproject/myproject.sock;
    }
}

我已经将侦听端口从80更改为8000,因为80给了我一个err_connection_refused错误.
使用此命令启动服务器后:

sudo systemctl restart nginx

当我尝试运行我的网站时,出现502 Bad Gateway错误.
我试过这些命令(在教程评论中找到):

sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl restart nginx

但没有变化.
当我使用此命令查看Nginix日志时:

sudo tail -f /var/log/nginx/error.log

我可以读到sock文件不存在:

2016/10/07 09:00:18 [crit] 24974#24974: *1 connect() to unix:/home/ben/myproject/myproject.sock failed (2: No such file or directory) while connecting to upstream, client: 86.197.20.27, server: 139.59.150.116, request: "GET / HTTP/1.1", upstream: "http://unix:/home/ben/myproject/myproject.sock:/", host: "server_ip_adress:8000"

为什么没有创建这个sock文件?如何配置django / gunicorn来创建此文件?
我在我的Django项目的INSTALLED_APP中添加了gunicorn,但它没有改变任何东西.

编辑:

当我用nginx -t测试nginx配置文件时,我收到一个错误:open()“/ run / nginx.pid”失败(13:Permission denied).
但是如果我用sudo:sudo nginx -t运行命令,则测试成功.这是否意味着我必须允许’ben’用户运行Ngnix?

关于gunicorn logfile,我找不到一种方法来阅读它们.它们存放在哪里?

当我通过使用ps aux |检查gunicorn是否正在运行时grep gunicorn:

ben      26543  0.0  0.2  14512  1016 pts/0    S+   14:52   0:00 grep --color=auto gunicorn

当你为gunicorn运行systemctl enable和start命令时,就会发生这样的问题:

sudo systemctl enable gunicorn
Synchronizing state of gunicorn.service with SysV init with /lib/systemd/systemd-sysv-install...
Executing /lib/systemd/systemd-sysv-install enable gunicorn

sudo systemctl start gunicorn
I get no output with this command

sudo systemctl is-active gunicorn
active

sudo systemctl status gunicorn
● gunicorn.service - gunicorn daemon
   Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset: enabled)
   Active: active (exited) since Thu 2016-10-06 15:40:29 UTC; 23h ago

Oct 06 15:40:29 DevUsine systemd[1]: Started gunicorn.service.
Oct 06 18:52:56 DevUsine systemd[1]: Started gunicorn.service.
Oct 06 20:55:05 DevUsine systemd[1]: Started gunicorn daemon.
Oct 06 20:55:17 DevUsine systemd[1]: Started gunicorn daemon.
Oct 06 21:07:36 DevUsine systemd[1]: Started gunicorn daemon.
Oct 06 21:16:42 DevUsine systemd[1]: Started gunicorn daemon.
Oct 06 21:21:38 DevUsine systemd[1]: Started gunicorn daemon.
Oct 06 21:25:28 DevUsine systemd[1]: Started gunicorn daemon.
Oct 07 08:58:43 DevUsine systemd[1]: Started gunicorn daemon.
Oct 07 15:01:22 DevUsine systemd[1]: Started gunicorn daemon.

解决方法:

我不得不更改我的sock文件夹的权限:

sudo chown ben:www-data /home/ben/myproject/

另一件事是我在许多帖子中阅读之后改变了袜子的位置,将sock文件保存在django项目中并不是一个好的实践.
我的新位置是:

/home/ben/run/

不要忘记更改权限:

sudo chown ben:www-data /home/ben/run/

为了确保刷新gunicorn,请运行以下命令:

pkill gunicorn
sudo systemctl daemon-reload
sudo systemctl start gunicorn

这将杀死枪支进程并开始新的进程.

您可以运行此命令以使进程在服务器引导时启动:

sudo systemctl enable gunicorn

一切都很好.

标签:python,nginx,django,gunicorn
来源: https://codeday.me/bug/20191008/1870309.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有