在heroku上部署我的app
heroku从2022.11.28起就要停止免费产品计划了;-;,所以我使用render作为替代品。
最近学了一点flask,听说heroku能免费部署小型应用,就想试着把我最近写的一个放上去试试。
以下为这次踩坑的记录:
安装
注册好账号后,安装heroku CLI
输入:
1 |
|
出现版本提示即为安装完成。
部署
我按照dashboard中deploy选项卡中对heroku git使用的介绍,做出以下操作:
1 |
|
如果heroku login
登录出现ip不匹配的情况,请使用heroku login -i
然后报错,看了一下似乎是没有设置buildpacks,所以我设置了buildpacks:
1 |
|
然后再次push,结果还是报错,于是我查看Activity选项卡中的日志,发现App not compatible with buildpack: https://buildpack-registry.s3.amazonaws.com/buildpacks/heroku/python.tgz
诶然后我就跟着那个网址下载下来一个压缩包,解压之后看了一下里面的README.md
,发现可能是因为缺少requirements.txt
和runtime.txt
导致的错误。
随后我查阅heroku关于python部署的官方文档示例文档,再进行以下操作:
1 |
|
打开之后把requirements.txt
和runtime.txt
复制到我app的文件夹中,再次push,成了!ohhhhhhhhhhhhhhhhhh(
总算把我的app整上去了。但是新的问题又来了,它似乎不能正常工作:
我尝试了:
1 |
|
但是不管等多久,都是Couldn't find that process type (web)
,执行heroku logs --tail
查看日志发现No web processes running
(H14)
在网上查找到了这篇文章,然后又被指路到了另一篇文章,了解到需要添加一个叫Procfile
的文件并在里面填上大致如下的内容:
1 |
|
我根据我的文件名和端口进行修改,填完之后再次执行上上步的操作:
1 |
|
现在看起来似乎是正常的了,但是打开网页一看还是不行,然后错误也换了一个变为App crashed
(H10)
1 |
|
执行以上操作,发现他不能打开我的文件,说是没有这个这个目录!?
1 |
|
我定睛一看,可能是要把文件放在website
文件夹下。我将main.py
和templates
、static
这俩文件夹一起移动到了新文件夹。(位置不对的话jinja2会找不到模板文件)
在此操作,ohhhhhhhhhhhhhhhhh能在本地上运行了!但是网站上仍然不能运行。
然后我再次翻日志,发现python报了一行错提示没有flask模块,然后我才发现我搬过来的requirements.txt
中没有flask……
加上之后再试一遍,很好,flask装上了,但是仍旧出错H10。
随后我注意到日志中有一行Permission denied
,这让我联想到了app运行时给我的警告:
1 |
|
我猜有可能跟这个有点关系(即使没关系我也应该使用wsgi启动服务来部署线上),随后我改了我的代码,在requirements.txt
添加上gevent
。
情况没有改变,不过报错总算换了一个了,而且是python的报错:
1 |
|
我在网上查找到这篇文章,随后试着把端口改成5000(flask默认分配的端口),然后错误又换了一个:
1 |
|
端口绑不上?我纳闷了,明明Procfile
中的端口和我app中的端口设置的都是5000,为什么会绑不上?
然后我看了这篇文章,直接就恍然大悟,我赶紧把我Procfile
中的端口又改了回去$PORT
,然后对app进行改动。
1 |
|
成功了!ohhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh!
补充
由于heroku马上就要不免费了,所以我换成了render。可以参阅render官方文档从heroku上进行转移。
我的网站:https://damp-shelf-90170.onrender.com/
不得不说render的构建速度真的感人,对非vip的限制太狠了;-;
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!