繁体   English   中英

在Debian8.7上使用uwsgi / nginx的Django内部服务器错误

[英]Internal Server Error for Django with uwsgi / nginx on Debian8.7

我是服务器技术的初学者,我很难将Debang8应用程序部署到Debian8服务器。 我一直在关注: 本教程但我无法启动uWSGI服务,所以我按照这个建议切换到systemd 然后我就能在端口:8000上以开发模式运行我的应用程序,但无法在浏览器中加载它。

日志说: no python application found, check your startup logs for errors

在日志中的这个注释上面,它抱怨无法加载whitenoise模块:

File "./testdjango/wsgi.py", line 35, in <module>
    from whitenoise.django import DjangoWhiteNoise

这意味着(如果我没有记错的话)它不会加载虚拟环境。

更新

如果我运行uwsgi --http :8000 --chdir /home/djangouser/testdjango --module testdjango.wsgi:application --env DJANGO_SETTINGS_MODULE=testdjango.settings --home /home/djangouser/Env/myapp_env终端命令uwsgi --http :8000 --chdir /home/djangouser/testdjango --module testdjango.wsgi:application --env DJANGO_SETTINGS_MODULE=testdjango.settings --home /home/djangouser/Env/myapp_env

我不知道为什么会这样,我会感谢任何帮助或指导。

在我在这里发布这个问题之前我做了搜索,实际上我在过去的三天里一直在尝试许多不同的解决方案而没有成功。 因为我的文件现在似乎很乱。 我为此道歉。

我使用django 1.8,virtualenvvrapper,名为djangouser的sudo用户,服务器上的文件夹结构如下所示:

 -home | |--djangouser | |--Env | |--myapp_env | |--testdjango | |-- app |-- testdjango | | | |-- wsgi.py | |-- settings.py | |-- uwsgi.ini |-- manage.py 

/etc/uwsgi/sites/testdjango.ini文件:

[uwsgi]
project = testdjango
base = /home/djangouser

chdir = %(base)/%(project)
home = %(base)/Env/myapp_env
module = %(project).wsgi:application
env = DJANGO_SETTINGS_MODULE=%(project).settings

master = true
processes = 5

socket = %(base)/%(project)/%(project).sock
chmod-socket = 666
vacuum = true

/etc/systemd/system/uwsgi.service文件:

[Unit]
Description=uWSGI Emperor service
After=syslog.target

[Service]
ExecStart=/usr/local/bin/uwsgi --emperor /etc/uwsgi/sites

Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

/etc/nginx/sites-available/testdjango文件:

server {
    listen 80;
    server_name xx.xx.xx.xx myapp.com www.myapp.com;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/djangouser/testdjango/static/;
    }

    location /media  {
        root /home/djangouser/testdjango/media/;
    }

    location / {
        include         uwsgi_params;
        uwsgi_pass      unix:/home/djangouser/testdjango/testdjango.sock;
    }
}

wsgi.py文件:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "testdjango.settings")

from django.core.wsgi import get_wsgi_application
from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(get_wsgi_application())

更新2

uwsgi --http :8000 --chdir /home/djangouser/testdjango --module testdjango.wsgi:application --env DJANGO_SETTINGS_MODULE=testdjango.settings --home /home/djangouser/Env/myapp_env
*** Starting uWSGI 2.0.15 (64bit) on [Wed Apr  5 14:48:34 2017] ***
compiled with version: 4.9.2 on 04 April 2017 17:12:38
os: Linux-4.9.7-x86_64-linode80 #2 SMP Thu Feb 2 15:43:55 EST 2017
nodename: xxonexx
machine: x86_64
clock source: unix
detected number of CPU cores: 1
current working directory: /home/djangouser/Env/myapp_env/lib/python2.7/site-packages
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/djangouser/testdjango
*** WARNING: you are running uWSGI without its master process manager ***
your processes number limit is 3934
your memory page size is 4096 bytes
detected max file descriptor number: 65536
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI http bound on :8000 fd 4
spawned uWSGI http 1 (pid: 5293)
uwsgi socket 0 bound to TCP address 127.0.0.1:36933 (port auto-assigned) fd 3
Python version: 2.7.9 (default, Jun 29 2016, 13:11:10)  [GCC 4.9.2]
Set PythonHome to /home/djangouser/Env/myapp_env
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x12036b0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 72760 bytes (71 KB) for 1 cores
*** Operational MODE: single process ***
HI!
Djangomode is: 
None
Traceback (most recent call last):
  File "./testdjango/wsgi.py", line 38, in <module>
    from whitenoise.django import DjangoWhiteNoise
  File "/home/djangouser/Env/myapp_env/local/lib/python2.7/site-packages/whitenoise/django.py", line 8, in <module>
    from django.contrib.staticfiles.storage import staticfiles_storage
  File "/home/djangouser/Env/myapp_env/local/lib/python2.7/site-packages/django/contrib/staticfiles/storage.py", line 12, in <module>
    from django.core.cache import (
  File "/home/djangouser/Env/myapp_env/local/lib/python2.7/site-packages/django/core/cache/__init__.py", line 34, in <module>
    if DEFAULT_CACHE_ALIAS not in settings.CACHES:
  File "/home/djangouser/Env/myapp_env/local/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/home/djangouser/Env/myapp_env/local/lib/python2.7/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/djangouser/Env/myapp_env/local/lib/python2.7/site-packages/django/conf/__init__.py", line 92, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "./testdjango/settings.py", line 59, in <module>
    ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS').split(',')
AttributeError: 'NoneType' object has no attribute 'split'
unable to load app 0 (mountpoint='') (callable not found or import error)
*** no app loaded. going in full dynamic mode ***
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI worker 1 (and the only) (pid: 5292, cores: 1)

在生产中,您需要在settings.py中编辑ALLOWED_HOSTS

官方文档显示以下示例:

ALLOWED_HOSTS = [
    '.example.com',  # Allow domain and subdomains
    '.example.com.',  # Also allow FQDN and subdomains
]

你可能应该在/etc/nginx/sites-available/testdjango文件的开头跟随你所拥有的一切。

您在开发中没有看到这个的原因是因为该设置会自动填充'localhost',因此它永远不会为空。

好吧,经过四天的奋斗,我找到了问题所在。 在第三次给这个问题重新开始并检查服务器上的错误消息后,我发现我应该将我的环境变量导入到uwsgi ini-file中。 在这之后,uwsgi.log中的错误消失了,应用程序开始按预期工作。

我真的希望这个答案将会节省一些时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM