我编写了一个简单的脚本publish.py
,用于发布用markdown编写的文章。
所以我可以使用:
python3 publish.py -a https://MYNAME.herokuapp.com/publish -p article.md -t MYTOKEN
上传我的文章并将其保存在我的sqlite database test.db
我的路线功能:
@main.route('/publish', methods=['GET', 'POST'])
def publish():
if request.method == 'GET':
abort(404)
# authorization
token = request.form.get('token', '')
if token != current_app.config['TOKEN']:
return 'invalid access token', 500
title = request.form.get('title', None)
if not title:
return 'no title found', 500
summary = request.form.get('summary', None)
if not summary:
return 'no summary found', 500
content = request.form.get('content', None)
if not content:
return 'no content found', 500
content = markdown2html(content)
pub_time = request.form.get('pub_time', None)
if pub_time:
pub_time = datetime.strptime(pub_time, app.config['TIME_FORMAT'])
tags = request.form.getlist('tags')
create_article(title, summary, content, pub_time, tags)
return '', 200
当我通过脚本发布artilce时,它正常,我的网站可以显示这篇文章。
但是当我在Heroku上push new changes
并重新启动时,我的文章刚刚发布了!
heroku maintenance:on
git push heroku master
heroku run python3 manage.py db upgrade
heroku restart
heroku maintenance:off
当我必须在Heroku上推送新的更改时,如何保留旧文章。 (如果我在我的localhost上运行我的服务器,这是很正常的)
答案 0 :(得分:1)
我猜,create_article
将帖子写入文件或SQLite数据库? Heroku does not keep data you store on disk,因此您无法使用这些存储数据的方式。
相反,请使用Postgres数据库。 Heroku provides you one。
答案 1 :(得分:0)
SQLite数据库需要文件来保存数据。 create_article
更新数据库,其文件存储在某些dyno中。这意味着只要您不执行与dyno相关的操作(例如部署(推送到远程分支)或重新启动),就可以发布新文章。
为了避免这种情况,您可能希望将数据库文件存储在其他位置,但运行other databases是一种更好的方法。
有关dynos的更多信息:https://devcenter.heroku.com/articles/dynos