运行`foreman start` /将Django应用程序部署到Heroku的问题

3ch*_*eel 3 django directory-structure heroku foreman procfile

这就是我的目录结构(我只包括相关部分):

my_git_root/
??? Procfile
??? README.md
??? requirements.txt
??? my_django_project
    ??? app1
    ?   ??? admin.py
    ?   ??? __init__.py
    ?   ??? models.py
    ?   ??? tests.py
    ?   ??? urls.py
    ?   ??? views.py
    ??? fabfile.py
    ??? app2
    ?   ??? __init__.py
    ?   ??? models.py
    ?   ??? templates
    ?   ??? tests.py
    ?   ??? views.py
    ??? manage.py
    ??? my_django_project
        ??? __init__.py
        ??? settings
        ?   ??? base.py
        ?   ??? __init__.py
        ?   ??? local.py
        ?   ??? production.py
        ?   ??? staging.py
        ??? static
        ??? urls.py
        ??? wsgi.py
Run Code Online (Sandbox Code Playgroud)

遵循官方Heroku文档,这是我在我的内容Procfile:

web: gunicorn my_django_project.wsgi
Run Code Online (Sandbox Code Playgroud)

但是当我运行foreman start命令时,我会得到一个结尾的长回溯ImportError: No module named my_django_project.wsgi..

移动Procfilegit_root/my_django_project/(Django的项目根)似乎工作(像什么在做这个职位),但只有在当地-尝试部署到Heroku的似乎是确定,直到您尝试缩放网页的过程:

$ heroku ps:scale web=1
Scaling web dynos... failed 
 !    No such process type web defined in Procfile. 
Run Code Online (Sandbox Code Playgroud)

看起来好像Heroku希望你把Procfile放在项目的git存储库根目录中,但是我已经尝试了很多组合Procfile,但似乎都没有.我也尝试过:

web: gunicorn my_django_project/my_django_project.wsgi
Run Code Online (Sandbox Code Playgroud)

Procfile但结果是ImportError: Import by filename is not supported.

指定python路径也不起作用; 即

web: gunicorn my_django_project.wsgi:application --pythonpath=/app/my_django_project
Run Code Online (Sandbox Code Playgroud)

抛出错误ImportError: No module named my_django_project.wsgi.

然而,在当地用gunicorn运行git_root/my_django_project/似乎工作:

$ gunicorn -b 0.0.0.0:8000 my_django_project.wsgi:application            
2013-10-15 16:55:31 [5703] [INFO] Starting gunicorn 18.0
2013-10-15 16:55:31 [5703] [INFO] Listening at: http://0.0.0.0:8000 (5703)
2013-10-15 16:55:31 [5703] [INFO] Using worker: sync
2013-10-15 16:55:31 [5708] [INFO] Booting worker with pid: 5708
2013-10-15 16:56:04 [5703] [INFO] Handling signal: winch
2013-10-15 16:56:04 [5703] [INFO] SIGWINCH ignored. Not daemonized
Run Code Online (Sandbox Code Playgroud)

所以我的猜测是我的语法Procfile不正确,但我不确定如何.

3ch*_*eel 7

写这个问题的同时想出来了!

我必须做的是设置--pythonpath指向我的django项目根目录的选项,即git_root/my_django_project/.

这就是我对我的看法Procfile:

web: gunicorn -b 0.0.0.0:8000 --pythonpath=./my_django_project my_django_project.wsgi:application
Run Code Online (Sandbox Code Playgroud)

现在它在本地工作:

$ foreman start
17:04:02 web.1  | started with pid 6327
17:04:02 web.1  | 2013-10-15 17:04:02 [6330] [INFO] Starting gunicorn 18.0
17:04:02 web.1  | 2013-10-15 17:04:02 [6330] [INFO] Listening at: http://0.0.0.0:8000 (6330)
17:04:02 web.1  | 2013-10-15 17:04:02 [6330] [INFO] Using worker: sync
17:04:02 web.1  | 2013-10-15 17:04:02 [6335] [INFO] Booting worker with pid: 6335
17:04:04 web.1  | 2013-10-15 17:04:04 [6330] [INFO] Handling signal: winch
17:04:04 web.1  | 2013-10-15 17:04:04 [6330] [INFO] SIGWINCH ignored. Not daemonized
Run Code Online (Sandbox Code Playgroud)

现在,扩展Web流程也可以正常工作:

$ heroku ps:scale web=1 --app my-django-project                          
Scaling web dynos... done, now running 1
Run Code Online (Sandbox Code Playgroud)