Flask 在Heroku部署遇到的坑
admin
2023-07-30 21:44:10
0

跟着狗书Flask web开发一章一章的学,到了部署这一章就感觉不一样了。书上的教程感觉没那么详细,有时候不知如何入手。书上介绍在heroku上部署,配置数据库那个例子的命令已经失效了。然后添加Procfile文件,书中只说添加这个文件,并且将Web:gunicorn manage:app添加到内容中。但是,我不知道保存为什么格式。最后通过checkout17C来找到那个文件,才知道该怎样做。

之后卡得最久的就是deploy部署这里。我把所有东西都弄好了,已经git push了就差deploy。可是返回了sqlite的错误信息,说没有roles这个表。但我本地数据库是有这个表存在的。我寻思会不会是迁移仓库的问题,由于之前配置自动迁移脚本出错,知识init了迁移仓库,没有migrate。我一直放着没理。在鼓捣几次后,终于知道当初是migrate失败是因为我已经建立的数据库。数据仓库迁移的migrate命令必须在没创建数据库前提下使用才能成功。以后数据库有新模型可以通过 db upgrade来更新。
我以为我找到了问题关键所在,但并没有。无论我如何更新,重新add . 重新commit最后deploy的时候都是提示no such table:roles

后来我干脆创建了个新的app,结果deploy成功了。。。。
然后页面可以成功打开,本来以为结束了。可是,新的问题又来了。我发现无法提交新数据。狗书的教程是教你做一个类似于微博的网站。而在heroku上我的网站提交新微博,新评论,资料修改都提示成功,可是却没有显示action之后新增的内容。我以为是数据库的问题,然后promote了数据库为主数据库,没有任何改变。最后我检查代码终于明白,这是狗书的一个坑。狗书中由于在config里的sql设置了teardowncommit开启,所以其他地方所有代码都只有add没有commit。我加上commit以后可以发布新内容。这一次真的以为终于成功了!

可我还是太天真了。如今遇到一个新问题:每隔一段时间服务器就会回档,我新增的内容和用户会被全部删除,变回原来上传上去的样子。我问了别人,他们说是服务器运营商的问题。我想,是不是因为我用的是只有7M空间的免费数据库导致的?
好了数据库的问题终于解决了。原因是我压根没有使用远程服务器的数据库。参考这篇教程http://www.jianshu.com/p/7bc34e56fa39我用pip安装了 psycopg2用于连接postgresql

Connecting in Python
To use PostgreSQL as your database in Python applications you will need to use thepsycopg2
package.
$ pip install psycopg2$ pip freeze > requirements.txt

And use this package to connect toDATABASE_URL
in your code:
import os
import psycopg2
import urlparse
urlparse.uses_netloc.append(\"postgres\")url = urlparse.urlparse(os.environ[\"DATABASE_URL\"])
conn = psycopg2.connect( database=url.path[1:]
,user=url.username, password=url.password, host=url.hostname, port=url.port)

上面这段代码不是要让你写进你的flask里,只是告诉你需要安装这个库,然后要通过环境变量获得DATABASE_URL

然后这段需要在源代码中进行修改

from flask import Flaskfrom flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config[\'SQLALCHEMY_DATABASE_URI\'] = \'postgresql://localhost/[YOUR_DATABASE_NAME]\'db = SQLAlchemy(app)


QQ截图20160926000051.png

成功了!

可是,还有一个问题我没解决。在heroku上部署以后,新用户注册就发不了邮件确认了。这是为什么捏?我找不到问题所在,所以取消了确认这一步!迟点再解决吧!

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...