django gunicorn袜子文件不是由wsgi创build的

我有一个本地虚拟环境,在我的数字海洋服务器(Ubuntu 16.04)中有一个基本的Djangorest应用程序。 基本的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

当我用这个命令testingGunicorn的服务项目的能力时: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 

我的Nginxconfiguration是:

 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错误网关错误。 我试过这些命令(在教程注释中find):

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

但没有任何变化。 当我用这个命令查看Nginx日志时:

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

我可以读取该袜子文件不存在:

 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" 

为什么这个袜子文件没有创build? 我如何configurationDjango / gunicorn来创build这个文件? 我在我的Django项目的INSTALLED_APP中添加了gunicorn,但它并没有改变任何东西。

编辑:

当我用nginx -ttestingnginxconfiguration文件时,我得到一个错误: open() "/run/nginx.pid" failed (13: Permission denied) 。 但是,如果我用sudo运行命令: sudo nginx -t ,testing成功。 这是否意味着我必须允许“本”用户运行Ngnix?

关于gunicorn日志文件,我找不到方法来阅读它们。 他们在哪里储存?

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

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

当你运行gunctorn的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. 

我不得不改变我的袜子文件夹的权限:

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

另外一件事是,我在很多帖子里看过后,改变了袜子的位置,把袜子文件保存在django项目中并不是一个好的实践。 我的新位置是:

 /home/ben/run/ 

不要忘记更改权限:

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

要确保gunicorn被刷新,运行这些命令:

 pkill gunicorn sudo systemctl daemon-reload sudo systemctl start gunicorn 

这将杀死gunicorn进程,并开始新的进程。

你可以运行这个命令来启动服务器启动过程:

 sudo systemctl enable gunicorn 

现在一切正常。