我的问题:
当使用 gunicorn 作为我的WSGI HTTP服务器时, foreman 无法找到Django(wsgi?)应用程序。
申请结构:
在我的Django应用程序中,我的结构如下:
<git_repository_root>/
<django_project_root>/
<configuration_root>/
<git_repository_root>
包含项目管理和部署相关的内容(requirements.txt
,Procfile
,fabfile.py
等。)
<django_project_root>
包含我的Django应用程序和应用程序逻辑。
最后,<configuration_root>
包含我的settings.py
和wsgi.py
。
我尝试了什么:
我的Procfile
应如下所示(根据Heroku Docs):
web: gunicorn myapp.wsgi
使用此项目布局运行foreman start
时,出现错误:
ImportError: Import by filename is not supported.
什么有效:
如果我将Procfile从<git_repository_root>
移动到<git_repository_root>
,它就可以在本地运行。在推送到Heroku之后(注意:Heroku看到<git_repository_root>
)我无法扩展任何工人/添加进程。我得到以下内容:
Scaling web dynos... failed
! No such process type web defined in Procfile.
我相信我想要Procfile
<git_repository_root>
,但为什么它不起作用?我还尝试将Procfile
更改为:
web: gunicorn myapp/myapp.wsgi
但没有运气。任何帮助将不胜感激!
答案 0 :(得分:1)
将Procfile
移回<git_repository_root>
并使用:
web: gunicorn <django_project_root>.myapp:myapp
用你的应用程序的类名替换最终的“myapp”,大概它确实是“myapp”。
...并阅读错误消息:它告诉您不能通过filename(myapp.wsgi)导入您的工人类(app
),所以当然说dirname/myapp.wsgi
赢了也行得通。您需要Python module:class
语法。
答案 1 :(得分:1)
将Procfile
中的条目视为bash命令。您可以cd
进入<django_project_root>
,然后运行服务器。
例如,您的Procfile
(应该在<git_repository_root>
中)可能如下所示:
web: cd <django_project_root> && gunicorn
--env DJANGO_SETTINGS_MODULE=<configuration_root>.settings
<configuration_root>.wsgi