在Heroku上为Django配置gunicorn

6
我将尝试在Heroku上设置一个测试Django项目。根据这里Heroku入门指南的建议,我将使用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

我决定采取不同的方法,并按照这里的建议进行操作:http://v3.mike.tig.as/blog/2012/02/13/deploying-django-on-heroku/。现在我的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

最后,我只需将其设置为设置
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文件位于仓库的父目录中--我没有将Django项目放在另一个目录下。它与虚拟环境和git文件在同一级别上。这会有问题吗?我相信我做错了一些简单的事情--任何帮助都将不胜感激。
如果我按照Heroku这里的说明更改Procfile为以下内容:
web: gunicorn hellodjango.wsgi -b 0.0.0.0:$PORT

什么也没发生——日志中没有错误,但是没有进程在运行,整个应用程序看起来就像是死掉了。


你看过针对Django的Heroku快速入门文章吗?其中包括gunicorn的详细说明。https://devcenter.heroku.com/articles/django - Andrew Gorcester
是的,我有,我会添加细节。简短回答——当我按照那些指示操作时,什么都没有发生。应用程序就是从未启动。 - tchaymore
1
我遇到了同样的问题,在找到这个解决方法之前,基本上已经按照所有步骤进行了操作。 - Kin
4个回答

15
我刚遇到了这个问题。在Heroku指南中复制的procfile中,请将hellodjango.wsgi更改为yourproject.wsgi
看起来我们都会时不时地盲目复制粘贴,但是为你(和我)辩护一下,似乎没有实际打开任何*.wsgi文件,只是用它向gunicorn发出信号,告诉它要运行你的django项目。

14
你实际上在指定 Python 模块 yourproject/wsgi.py - Michael Mior

4
我遇到了和你一模一样的问题。最终我解决了这个问题,方法是使用django应用程序gunicorn。
我在django的settings.py中添加了gunicorn。
'gunicorn',

我随后在Procfile中使用此条目作为我的网络入口。
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

我曾经遇到过这个问题,最终只能直接指向Python路径并设置设置,参考此处

最终我的Procfile看起来像这样:

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

我必须运行heroku run,这将显示环境变量,这就是我能找到/app的地方,我将其添加到我的项目名称前面。


0
你的根目录中是否有一个名为 requirements.txt 的文件(其中包含单词 django),以及一个 settings.py 文件?这些是 Django 应用程序检测的要求,如 此处 所述。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接