Django、uwsgi 和 nginx - 内部服务器错误

5
我是一名有帮助的助手,可以翻译文本。

我对Python还比较陌生,正在进行我的第一个Django项目。我遵循了this教程。我成功地配置了所有的东西,但是Django应用程序本身却无法工作。如果我单独运行Django服务器,它可以工作,但是如果由uwsgi启动,则无法工作。

这是我的uwsgi配置:

import os

from django.core.wsgi import get_wsgi_application

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

application = get_wsgi_application()

And error from uwsgi log:

--- no python application found, check your startup logs for errors ---

所以我查找了启动错误:

Traceback (most recent call last):
  File "./wsgi.py", line 16, in <module>
    application = get_wsgi_application()
  File "/var/www/api.partycon.net/virtualpy/local/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application
    django.setup()
  File "/var/www/api.partycon.net/virtualpy/local/lib/python2.7/site-packages/django/__init__.py", line 17, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/var/www/api.partycon.net/virtualpy/local/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in __getattr__
    self._setup(name)
  File "/var/www/api.partycon.net/virtualpy/local/lib/python2.7/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/var/www/api.partycon.net/virtualpy/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)
ImportError: No module named api.settings

我的项目目录树:

.
|-- api
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- media
|   |   `-- sample-media.jpg
|   |-- settings.py
|   |-- settings.pyc
|   |-- urls.py
|   |-- urls.pyc
|   |-- wsgi.py
|   `-- wsgi.pyc
|-- db.sqlite3
|-- manage.py
|-- static
|   `-- admin
|       ... ... ... ...
|-- uwsgi_conf.ini
`-- uwsgi_params

我希望我提供了足够的信息,但是我可以告诉你更多——问题在于我实际上不知道该去哪里寻找。
提前感谢 :)
1个回答

10

你可能在uwsgi_conf.ini中缺少chdir行,或者你有一个chdir行,但它是错误的。

根据你的追溯信息,这一点得到了确认:

File "./wsgi.py", line 16, in <module>

在这里,您应该看到./api/wsgi.py,而不是./wsgi.py

显然,uWSGI的工作目录是api/目录,实际上应该是父目录。

通常情况下,uWSGI配置文件应该像这样:

[uwsgi]
chdir=/path/to/your/project
module=mysite.wsgi:application
...

请参阅Django文档中有关uWSGI的说明


好的,谢谢@Andrea Corbellini。这帮助我进入了下一个阶段:现在我在uwsgi日志中遇到了这个错误:ImportError: No module named py \n unable to load app 0 (mountpoint='') (callable not found or import error) - Žiga Patačko Koderman
1
@ŽigaPatačkoKoderman:你的代码中有一个尾随的 py。也许,你写成了 api.wsgi.py 而不是 api.wsgi - Andrea Corbellini
谢谢@Andrea Corbellini。没错,我把wsgi文件命名为了wsgi.py而不是api.wsgi。非常感谢你 :) 你能否编辑你的帖子,并在评论中添加你告诉我的内容,这样其他人就可以更容易地看到了吗? - Žiga Patačko Koderman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接