在Heroku上为Django配置gunicorn

时间:2012-05-10 04:28:56

标签: python django heroku gunicorn

我正在尝试在Heroku上设置一个测试Django项目。遵循建议here并在Heroku Getting Started中我尝试使用gunicorn而不是Django dev服务器。

这是我第一次尝试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

没有任何反应 - 日志中没有错误,但没有进行任何程序,应用程序只是在水中出现。

4 个答案:

答案 0 :(得分:14)

我刚遇到同样的问题。在您从Heroku指南中复制的proc文件中,将hellodjango.wsgi更改为yourproject.wsgi

看起来我们都是偶尔盲目复制粘贴的受害者,但是在你(和我的)防守中,看起来没有* .wsgi文件实际上被打开了,这就是你向枪炮发出的信号希望它能够运行你的django项目。

答案 1 :(得分:4)

我遇到了与你一样的问题。我最终能够使用它的方法是使用django app 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。

答案 2 :(得分:2)

我遇到了这个问题并且必须直接指向python路径,然后设置reference设置。

最后我的Procfile如下所示:

web: gunicorn_django --pythonpath=/app/project --settings=settings

我必须运行显示env变量的heroku run,这是我能够找到我的项目名称前面的/app的地方。

答案 3 :(得分:0)

根文件夹中是否包含requirements.txt(包含单词django),还有settings.py?这些似乎是Django应用程序检测的要求,如文档here所示。