加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:30:44 所属栏目:Python 来源:网络整理
导读:这就是我的目录结构(我只包括相关部分): my_git_root/├── Procfile├── README.md├── requirements.txt└── my_django_project ├── app1 │?? ├── admin.py │?? ├── __init__.py │?? ├── models.py │?? ├── tests.py │?? ├─
这就是我的目录结构(我只包括相关部分):

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,command时,我得到一个以ImportError结尾的长回溯:没有名为my_django_project.wsgi的模块.

将Procfile从git_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:不支持按文件名导入.

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

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

抛出错误ImportError:没有名为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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读