gpt4 book ai didi

django - 运行 `foreman start`/将 Django 应用程序部署到 Heroku 时出现问题

转载 作者:行者123 更新时间:2023-12-01 09:59:04 26 4
gpt4 key购买 nike

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

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

official Heroku docs 之后,这是我的 Procfile 中的内容:

web: gunicorn my_django_project.wsgi

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

Procfilegit_root/ 移动到 my_django_project/(Django 项目根目录)似乎可行(就像在 this post 中所做的一样) ),但仅限于本地——尝试部署到 Heroku 似乎没问题,直到您尝试扩展 Web 进程:

$ heroku ps:scale web=1
Scaling web dynos... failed
! No such process type web defined in Procfile.

看起来好像 Heroku wants you to put the Procfile in the project's git repository root ,但我在 Procfile 中尝试了很多组合,但似乎都不起作用。我也试过:

web: gunicorn my_django_project/my_django_project.wsgi

Procfile 中,但这会导致 ImportError: Import by filename is not supported.

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

web: gunicorn my_django_project.wsgi:application --pythonpath=/app/my_django_project

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

但是,使用来自 git_root/my_django_project/ 的 gunicorn 在本地运行似乎可行:

$ 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

所以我的猜测是我的 Procfile 中的语法不正确,但我不确定是怎么回事。

最佳答案

写这道题的时候想通了!

我必须做的是将 --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

现在它在本地工作了:

$ 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

现在扩展网络进程也可以了:

$ heroku ps:scale web=1 --app my-django-project                          
Scaling web dynos... done, now running 1

关于django - 运行 `foreman start`/将 Django 应用程序部署到 Heroku 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19391335/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com