在 Heroku 上为 Django 配置 gunicorn
Posted
技术标签:
【中文标题】在 Heroku 上为 Django 配置 gunicorn【英文标题】:Configuring gunicorn for Django on Heroku 【发布时间】:2012-05-18 15:25:19 【问题描述】:我正在尝试在 Heroku 上设置一个测试 Django 项目。按照here 和Heroku Getting Started 的建议,我尝试使用gunicorn
而不是Django 开发服务器。
这是我对 Procfile 的第一次尝试:
web: gunicorn_django --workers=4 --bind=0.0.0.0:$PORT my_project/settings.py
worker: python my_project/manage.py celeryd -E -B --loglevel=INFO
这给了我这个错误:
ImportError: Could not import settings 'settings.py' (Is it on sys.path?): No module named py
我决定采取不同的方式并遵循here 的建议。现在我的 Procfile 看起来像这样:
web: gunicorn_django -b 0.0.0.0:\$PORT -w 9 -k gevent --max-requests 250 --preload my_project.settings
(我还更新了我的需求文件以包含 gevent。)它给了我同样的错误:
ImportError: Could not import settings
最后,我只是将其设置为settings
:
web: gunicorn_django -b 0.0.0.0:\$PORT -w 9 -k gevent --max-requests 250 --preload settings
但现在我得到了这个错误:
Error: django project not found
我的 Django 项目的设置方式是 settings.py
文件位于 repo 的父目录中——我没有另一个目录下的 Django 项目。它与 virtualenv 和 git 文件处于同一级别。那会是个问题吗?我确定我在做一些简单的错误 - 任何帮助将不胜感激。
如果我按照 Heroku here 的说明将 Procfile 更改为:
web: gunicorn hellodjango.wsgi -b 0.0.0.0:$PORT
什么都没有发生 - 日志中没有错误,但没有进程运行,应用程序似乎死在水中。
【问题讨论】:
您是否看过专门针对 Django 的 Heroku 快速入门文章?它包括 gunicorn 的详细说明。 devcenter.heroku.com/articles/django 是的,我有,我会添加详细信息。简短的回答——当我遵循这些指示时,什么都没有发生。该应用程序永远不会启动。 我遇到了同样的问题,基本上在找到这个之前已经完成了所有这些步骤。 【参考方案1】:我刚刚遇到了同样的问题。在您从 Heroku 指南复制的 procfile 中,将 hellodjango.wsgi
更改为 yourproject.wsgi
看起来我们都时不时地成为盲目复制粘贴的受害者,但在你(和我)的辩护中,看起来实际上没有打开 *.wsgi 文件,这只是你向 gunicorn 发出信号的方式希望它运行你的 django 项目。
【讨论】:
您实际上是在指定 Python 模块yourproject/wsgi.py
。【参考方案2】:
我遇到了和你一样的问题。我最终能够让它工作的方法是使用 django 应用 gunicorn。
我在 django settings.py 中添加了 gunicorn
'gunicorn',
然后我将其用作我的 Procfile 中的 Web 条目。
web: python manage.py run_gunicorn -b 0.0.0.0:\$PORT -w 9 -k gevent --max-requests 250 --preload
如果您使用与我不同的目录结构,您可能需要更改 .manage.py。我的应用在/app,我的python路径也在/app。
【讨论】:
【参考方案3】:我遇到了这个问题,不得不直接指向 python 路径,然后设置设置reference。
最后我的 Procfile 看起来像这样:
web: gunicorn_django --pythonpath=/app/project --settings=settings
我必须运行heroku run
,它显示了环境变量,这就是我能够找到添加到我的项目名称前面的/app
。
【讨论】:
【参考方案4】:根文件夹中是否有requirements.txt
(包含单词django
)和settings.py
?这些似乎是 Django 应用程序检测的要求,如文档 here 所述。
【讨论】:
以上是关于在 Heroku 上为 Django 配置 gunicorn的主要内容,如果未能解决你的问题,请参考以下文章
在 Heroku 上为 Mongo Labs 数据库配置 Node.js 连接字符串
为啥在 Heroku 服务器上为 Laravel JWT 身份验证收到此错误