部署到Heroku时指定项目根目录

时间:2013-08-06 09:29:45

标签: django deployment heroku

我的问题:

当使用 gunicorn 作为我的WSGI HTTP服务器时, foreman 无法找到Django(wsgi?)应用程序。

申请结构:

在我的Django应用程序中,我的结构如下:

<git_repository_root>/
  <django_project_root>/
    <configuration_root>/

<git_repository_root>包含项目管理和部署相关的内容(requirements.txtProcfilefabfile.py等。)

<django_project_root>包含我的Django应用程序和应用程序逻辑。

最后,<configuration_root>包含我的settings.pywsgi.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

但没有运气。任何帮助将不胜感激!

2 个答案:

答案 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