尝试使用 Foreman 在 Gunicorn 上本地运行 Django 应用程序

Posted

技术标签:

【中文标题】尝试使用 Foreman 在 Gunicorn 上本地运行 Django 应用程序【英文标题】:Trying to run Django app on Gunicorn locally using Foreman 【发布时间】:2013-04-29 22:33:33 【问题描述】:

我正在关注Getting Started with Django on Heroku tutorial 当我尝试使用 Foreman 在 Gunicorn 上运行 Django 应用程序时,我得到下一个错误回溯:

09:23:33 web.1  | started with pid 7012  
09:23:34 web.1  | 2013-05-06 09:23:34 [7012] [INFO] Starting gunicorn 0.17.2  
09:23:34 web.1  | 2013-05-06 09:23:34 [7012] [INFO] Listening at: `http://0.0.0.0:5000` (7012)  
09:23:34 web.1  | 2013-05-06 09:23:34 [7012] [INFO] Using worker: sync  
09:23:34 web.1  | 2013-05-06 09:23:34 [7015] [INFO] Booting worker with pid: 7015  
09:23:34 web.1  | 2013-05-06 09:23:34 [7015] [ERROR] Exception in worker process:  
09:23:34 web.1  | Traceback (most recent call last):  
09:23:34 web.1  |   File "/usr/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 485, in spawn_worker  
09:23:34 web.1  |     worker.init_process()  
09:23:34 web.1  |   File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 100, in init_process  
09:23:34 web.1  |     self.wsgi = self.app.wsgi()  
09:23:34 web.1  |   File "/usr/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 103, in wsgi  
09:23:34 web.1  |     self.callable = self.load()  
09:23:34 web.1  |   File "/usr/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 25, in load  
09:23:34 web.1  |     return util.import_app(self.app_uri)  
09:23:34 web.1  |   File "/usr/local/lib/python2.7/site-packages/gunicorn/util.py", line 372, in import_app  
09:23:34 web.1  |     __import__(module)  
09:23:34 web.1  |   File "/Users/cosmicMan66/DjangoDev/hepcat_server/hepcat_server/wsgi.py", line 27, in <module>  
09:23:34 web.1  |     from django.core.wsgi import get_wsgi_application  
09:23:34 web.1  | ImportError: No module named django.core.wsgi  
09:23:34 web.1  | Traceback (most recent call last):  
09:23:34 web.1  |   File "/usr/local/lib/python2.7/site-packages/gunicorn/arbiter.py", line 485, in spawn_worker  
09:23:34 web.1  |     worker.init_process()  
09:23:34 web.1  |   File "/usr/local/lib/python2.7/site-packages/gunicorn/workers/base.py", line 100, in init_process  
09:23:34 web.1  |     self.wsgi = self.app.wsgi()  
09:23:34 web.1  |   File "/usr/local/lib/python2.7/site-packages/gunicorn/app/base.py", line 103, in wsgi  
09:23:34 web.1  |     self.callable = self.load()  
09:23:34 web.1  |   File "/usr/local/lib/python2.7/site-packages/gunicorn/app/wsgiapp.py", line 25, in load  
09:23:34 web.1  |     return util.import_app(self.app_uri)  
09:23:34 web.1  |   File "/usr/local/lib/python2.7/site-packages/gunicorn/util.py", line 372, in import_app  
09:23:34 web.1  |     __import__(module)  
09:23:34 web.1  |   File "/Users/cosmicMan66/DjangoDev/hepcat_server/hepcat_server/wsgi.py", line 27, in <module>  
09:23:34 web.1  |     from django.core.wsgi import get_wsgi_application  
09:23:34 web.1  | ImportError: No module named django.core.wsgi  
09:23:34 web.1  | 2013-05-06 09:23:34 [7015] [INFO] Worker exiting (pid: 7015)  
09:23:35 web.1  | 2013-05-06 09:23:35 [7012] [INFO] Shutting down: Master  
09:23:35 web.1  | 2013-05-06 09:23:35 [7012] [INFO] Reason: Worker failed to boot.  
09:23:35 web.1  | exited with code 3  
09:23:35 system | sending SIGTERM to all processes  
SIGTERM received

Procfile 位于项目的根目录,包含:

网站:gunicorn hepcat_server.wsgi

settings.py 位于 hepcat_server 目录

当我使用$ python manage.py run_gunicorn gunicorn 成功启动,我看到了默认的 Django 页面

【问题讨论】:

看看this gist -- 这是我如何让 DJANGO 教程 1 和 2 与 Heroku 一起工作的完整日志。 【参考方案1】:

我在关注您使用的 Heroku 设置页面时遇到了同样的问题。我在this page 上找到了解决方案。我已将其复制到这里以供后代使用:

在 django 项目的根目录中,创建 Procfile 文件。 然后在网上写下这个: sh -c "cd djangoproject && gunicorn djangoproject.wsgi"。然后在同一个文件中创建另一个名为 .env 的文件 位置,将 DJANGO_SETTINGS_MODULE=djangoproject.settings 写入其中, 这将帮助您设置无法设置的所需环境变量 在 djangoproject.wsgi 模块中设置。运行 foreman start 以进行测试。 给出下面的问题,这应该是不言自明的。

部署时,在 heroku 中创建应用程序后,设置 使用此命令 heroku config:set 的 env 变量 DJANGO_SETTINGS_MODULE=djangoproject.settings,这是因为 在文件 djangoproject/djangoproject/wsgi.py 之前部署失败 正在运行。

记得将“djangoproject”替换为你的 django 项目的名称。

【讨论】:

以上是关于尝试使用 Foreman 在 Gunicorn 上本地运行 Django 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

Rails - Vuejs 与 Foreman 一起运行

在 centos 7 上使用 gunicorn 和 django 的 nginx

Heroku 中的 Node.js 应用程序在 Foreman 上工作,但在部署时不工作?

如何在 mac os x 上使用 gunicorn 和 python3.8 而不是 python3.9?

在 Heroku 上为 Django 配置 gunicorn

无法在 osx 上使用 nginx + gunicorn 查看静态文件