【问题标题】:Making a Django web app work with gunicorn使用 gunicorn 制作 Django Web 应用程序
【发布时间】:2020-11-15 17:19:36
【问题描述】:

我很感兴趣将 nginx 和 gunicorn 放在以下 Django Web 应用程序 (https://github.com/fiduswriter/fiduswriter) 的前面。这个网络 abd 使用通常的 python manage.py runserver 命令运行良好,但对于 gunicorn,我需要有 wsgi.py 文件,我在任何地方都找不到。

插入代码时

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'fiduswriter.settings')

application = get_wsgi_application()

进入 fiduswriter/base/wsgi.py 并以 gunicorn base.wsgi运行 gunicorn@我收到以下错误

```我很感兴趣将 nginx 和 gunicorn 放在以下 Django Web 应用程序 (https://github.com/fiduswriter/fiduswriter) 的前面。这个 web abd 使用通常的 python manage.py runserver 命令运行良好,但对于 gunicorn,我需要有 wsgi.py 文件,我在任何地方都找不到。

插入代码时

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'fiduswriter.settings')

application = get_wsgi_application()

以 fiduswriter/base/wsgi.py 身份运行 gunicorn 为 gunicorn base.wsgi我收到以下错误

[2020-07-26 14:36:16 +0200] [86714] [INFO] Listening at: http://127.0.0.1:8000 (86714)
[2020-07-26 14:36:16 +0200] [86714] [INFO] Using worker: sync
[2020-07-26 14:36:16 +0200] [86716] [INFO] Booting worker with pid: 86716
[2020-07-26 14:36:16 +0200] [86716] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/gunicorn/arbiter.py", line 583, in spawn_worker
    worker.init_process()
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/gunicorn/workers/base.py", line 119, in init_process
    self.load_wsgi()
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/gunicorn/workers/base.py", line 144, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 49, in load
    return self.load_wsgiapp()
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/gunicorn/app/wsgiapp.py", line 39, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/gunicorn/util.py", line 358, in import_app
    mod = importlib.import_module(module)
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 671, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 783, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/user/Dokumente/TextPrediction/fiduswriter/fiduswriter/base/wsgi.py", line 16, in <module>
    application = get_wsgi_application()
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/django/core/wsgi.py", line 12, in get_wsgi_application
    django.setup(set_prefix=False)
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/django/__init__.py", line 19, in setup
    configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/django/conf/__init__.py", line 79, in __getattr__
    self._setup(name)
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/django/conf/__init__.py", line 66, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/site-packages/django/conf/__init__.py", line 157, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
  File "/home/user/anaconda3/envs/fiduswriter/lib/python3.8/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'fiduswriter'
[2020-07-26 14:36:16 +0200] [86716] [INFO] Worker exiting (pid: 86716)
[2020-07-26 14:36:16 +0200] [86714] [INFO] Shutting down: Master
[2020-07-26 14:36:16 +0200] [86714] [INFO] Reason: Worker failed to boot.

因此,我问自己是否有任何方法可以绕过这个问题,以便在这里使用 gunicorn。

【问题讨论】:

  • 绕过什么“问题”?文件存在于&lt;project_name&gt;/wsgi.py
  • 很抱歉,我在前面提到的 Django web appb repo 中找不到它。这就是为什么我要问如何使这个网络应用程序与 gunicorn 一起工作。

标签: python django web-applications gunicorn production


【解决方案1】:

默认情况下,当您创建 Django 项目时,会自动创建 wsgi.py,如果缺少它,您可以创建该文件并从 Internet 复制代码,我认为没有 wsgi 将无法使用 gunicorn。 py文件

【讨论】:

  • 感谢您的回答。除了github.com/microsoft/project-python-django-webapp/blob/master/… 之类的标准文本之外,我还应该插入什么其他内容吗?
  • 我试过这个,但没有成功。我在实际问题中更详细地解释了我的方法。
  • 那是路径的问题,stackoverflow上已经有答案了,请搜索
  • 感谢您的建议。但是,我一直在尝试很多事情:对接一些基本目录(大多数此类代码所在的位置),在一个名为 fiduswriter 的新形成的目录中等等。我仍然收到“找不到模块”错误。你知道怎么解决吗?
猜你喜欢
  • 1970-01-01
  • 2015-01-07
  • 2016-11-03
  • 2021-02-26
  • 2018-02-04
  • 2019-09-19
  • 2011-07-19
  • 2018-03-08
  • 1970-01-01
相关资源
最近更新 更多