如何从不是 django 项目文件夹的文件夹中运行 gunicorn

Posted

技术标签:

【中文标题】如何从不是 django 项目文件夹的文件夹中运行 gunicorn【英文标题】:How to run gunicorn from a folder that is not the django project folder 【发布时间】:2017-08-15 03:26:34 【问题描述】:

我在我的主文件夹中克隆了一个项目,我们称之为/home/telessaude。所以项目根目录位于/home/telessaude/telessaude_branch_master

如果我在 Django 项目主文件夹 ( /home/telessaude/telessaude_branch_master ) 中并发出 gunicorn comman 之类的

gunicorn -w 2 -b 0.0.0.0:8000 telessaude.wsgi_dev:application --reload --timeout 900

gunicorn 启动并且工作正常。但是......如果我尝试在上面的一个目录( /​​home/telessaude )上运行相同的命令,我会收到以下错误:

telessaude@ubuntu:~$ gunicorn -w 2 -b 0.0.0.0:8000 telessaude.wsgi_dev:application --reload --timeout 900
[2017-03-22 16:39:28 +0000] [10405] [INFO] Starting gunicorn 19.6.0
[2017-03-22 16:39:28 +0000] [10405] [INFO] Listening at: http://0.0.0.0:8000 (10405)
[2017-03-22 16:39:28 +0000] [10405] [INFO] Using worker: sync
[2017-03-22 16:39:28 +0000] [10410] [INFO] Booting worker with pid: 10410
[2017-03-22 16:39:28 +0000] [10410] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 557, in spawn_worker
    worker.init_process()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 136, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 357, in import_app
    __import__(module)
ImportError: No module named telessaude.wsgi_dev

我还尝试在我的主文件夹中运行 gunicorn

gunicorn -w 2 -b 0.0.0.0:8000 telessaude_branch_master.telessaude.wsgi_dev:application --reload --timeout 900

gunicorn -w 2 -b 0.0.0.0:8000 /home/telessaude/telessaude_branch_master/telessaude.wsgi_dev:application --reload --timeout 900

但它们都没有工作。有人可以告诉我如何解决这个问题吗?我需要从任何文件夹运行 gunicorn,因为我必须将其作为“命令”参数添加到主管。

我没有使用虚拟环境。

【问题讨论】:

【参考方案1】:

在执行命令之前,您可以使用 Gunicorn 的 chdir 标志切换到项目目录。

gunicorn -w 2 -b 0.0.0.0:8000 --chdir /home/telessaude/telessaude_branch_master telessaude.wsgi_dev:application --reload --timeout 900

【讨论】:

谢谢!由于无法从 systemd 服务文件中指定正确的命令,我被卡住了。 --chdir 选项成功了!【参考方案2】:

您应该将您的 django 应用添加到 Python 路径。

在最新的gunicorn中,你可以试试这个:

如果django项目的根路径是/usr/local/src/djangoapp/.

settings.py 路径默认为/usr/local/src/djangoapp/djangoapp/settings.py

gunicorn \
-c /usr/local/src/djangoapp/gunicorn_config.py \
--env DJANGO_SETTINGS_MODULE=djangoapp.settings \
--pythonpath '/usr/local/src/djangoapp' \
djangoapp.wsgi:application
-c 配置文件路径 --env django 项目中 settings.py 的模块路径 --pythonpath 将你的项目路径添加到 Python Path settings.html#pythonpath

--env--pythonpath 为必填项。

相对路径也可以!

【讨论】:

以上是关于如何从不是 django 项目文件夹的文件夹中运行 gunicorn的主要内容,如果未能解决你的问题,请参考以下文章

如何从不需要机器上的 Matlab 编译器运行时 (MCR) 的 matlab gui 生成可执行文件

如何访问 django 项目外的目录文件?

如何从不同于网络的本地文件中读取 InputStream 对象(通过 Amazon S3)?

从不同文件添加项目并使用数组列表将它们存储在另一个文件中

如何在 Django 项目中使用 Marzipano 360 媒体查看器?

pycharm虚拟环境中的项目如何在别的电脑上运行?