跟着狗书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设置了teardown
的commit
开启,所以其他地方所有代码都只有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)
成功了!
可是,还有一个问题我没解决。在heroku上部署以后,新用户注册就发不了邮件确认了。这是为什么捏?我找不到问题所在,所以取消了确认这一步!迟点再解决吧!