尝试使用 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 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
在 centos 7 上使用 gunicorn 和 django 的 nginx
Heroku 中的 Node.js 应用程序在 Foreman 上工作,但在部署时不工作?
如何在 mac os x 上使用 gunicorn 和 python3.8 而不是 python3.9?