【问题标题】:Setting up Django Application with Gunicorn使用 Gunicorn 设置 Django 应用程序
【发布时间】:2015-04-30 09:05:04
【问题描述】:

所以我正在关注这个关于数字海洋的教程:https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-django-with-postgres-nginx-and-gunicorn

我唯一没有做的就是使用数据库引擎,我只是坚持使用SQLite3 引擎,因为应用程序很小。我已经到了尝试运行服务器 wgsi 文件的地步,它显示了不支持导入文件名的错误。我不确定如何解决这个问题。

我试过跑步:

python manage.py run_gunicorn 127.0.0.0:8001

但它说 Unknown command: 'run_gunicorn' 并显示帮助它没有显示 run_gunicorn

这是我的 wgsi 文件(取出项目名称):

import os

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

from django.core.wgsi import get_wgsi_application
application = get_wgsi_application()

这是回溯:

Traceback (most recent call last):
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
    worker.init_process()
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 118, in init_process
    self.wsgi = self.app.wsgi()
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app
    __import__(module)
ImportError: Import by filename is not supported.
Traceback (most recent call last):
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 507, in spawn_worker
    worker.init_process()
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 118, in init_process
    self.wsgi = self.app.wsgi()
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/opt/sanderson-holdings/local/lib/python2.7/site-packages/gunicorn/util.py", line 355, in import_app
    __import__(module)
ImportError: Import by filename is not supported.

【问题讨论】:

  • 这是一个非常古老的教程;您可能应该使用gunicorn's own documentation 中的完美示例。但是,现在您可以发布用于启动 gunicorn 的代码吗?
  • 我实际上只是在使用与manage.py 在同一目录中的gunicorn xx.wgsi,我是否需要设置选项才能使其正常工作?
  • 上面写着ImportError: No module named xx.wgsi,其中xx是项目名和wgsi文件名
  • 抱歉,同一个目录中有什么?你的意思是你的文件名“xx.wsgi”和manage.py在同一个目录下吗?你不应该;您应该在与您的设置文件相同的目录中拥有一个名为“wsgi.py”的文件,即与您的项目同名的文件。 Django 为您创建。
  • 我将文件重命名为 wgsi.py 并再次运行它并没有工作

标签: python django nginx gunicorn


【解决方案1】:

从 manage.py run_gunicorn 迁移到实际使用 gunicorn 命令时,我遇到了类似的问题。我发现除了实际的 wsgi 文件之外,我还必须设置 DJANGO_SETTINGS_MODULE 和设置。

我的项目结构:

  • eetecnet/
    • manage.py
    • eetecnet/
      • eestecnet.wsgi
      • 设置/
        • deployment.py

我从根 eestecnet 文件夹运行以下命令:

gunicorn --env DJANGO_SETTINGS_MODULE=eestecnet.settings.deployment --settings eestecnet.settings.deployment eestecnet.wsgi

在我的设置中我还指定:

WSGI_APPLICATION = 'eestecnet.wsgi.application'

希望对你有所帮助。

【讨论】:

  • eestecnet.wsgi 文件是否与 wsgi.py 文件相同?我只是使用 Django 生成的默认 settings.py 文件并尝试运行您的命令,但找不到设置文件
  • 我刚刚使用了settings,它看起来很有效,因为它现在说没有名为 company 的模块,这是我的 Django 模块之一。我该如何指出正确的方向?
  • 据我了解,eestecnet.wsgi 与 /eestecnet/eestecnet/wsgi.py 是同一个文件,因为“eestec.wsgi”不是文件扩展名,而是从根目录开始的点分隔路径。如果找不到您的模块之一,请确保您的环境设置正确并且您已激活 virtualenv。如果您通常从不同的根目录运行项目,则设置应用程序的路径也可能不正确。
猜你喜欢
  • 2020-11-15
  • 2016-11-03
  • 2020-11-20
  • 2014-06-03
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 2019-09-19
  • 2011-07-19
相关资源
最近更新 更多