当我在 heroku 上重新部署我的 flask 应用程序时,为什么我不能保留我最近发表的文章?
Why can't I keep my articles published recently when I redeploy my flask app on heroku?
我写了一个简单的脚本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
当我通过脚本发布文章时它是正常的,我的网站可以显示这篇文章。
但是当我 push new changes
在 Heroku 上并重新启动它时,我刚刚发表的文章消失了!
heroku maintenance:on
git push heroku master
heroku run python3 manage.py db upgrade
heroku restart
heroku maintenance:off
当我必须在 Heroku 上推送新更改时,如何保留我的旧文章。
(如果我 运行 我的服务器在我的本地主机上,这是很正常的)
让我猜猜,create_article
将 post 写入文件或 SQLite 数据库? Heroku does not keep data you store on disk,所以你不能使用这些存储数据的方式。
改为使用 Postgres 数据库。 Heroku provides you one.
SQLite 数据库需要文件来保存数据。 create_article
更新数据库,其文件存储在一些dyno 中。这意味着只要您不执行 dyno-related 部署(推送到远程分支)或重新启动等操作,就可以 post 新文章。
为避免这种情况,您可能希望将数据库文件存储在其他地方,但 运行 other databases 是更好的方法。
关于测功机的更多信息:https://devcenter.heroku.com/articles/dynos
我写了一个简单的脚本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
当我通过脚本发布文章时它是正常的,我的网站可以显示这篇文章。
但是当我 push new changes
在 Heroku 上并重新启动它时,我刚刚发表的文章消失了!
heroku maintenance:on
git push heroku master
heroku run python3 manage.py db upgrade
heroku restart
heroku maintenance:off
当我必须在 Heroku 上推送新更改时,如何保留我的旧文章。 (如果我 运行 我的服务器在我的本地主机上,这是很正常的)
让我猜猜,create_article
将 post 写入文件或 SQLite 数据库? Heroku does not keep data you store on disk,所以你不能使用这些存储数据的方式。
改为使用 Postgres 数据库。 Heroku provides you one.
SQLite 数据库需要文件来保存数据。 create_article
更新数据库,其文件存储在一些dyno 中。这意味着只要您不执行 dyno-related 部署(推送到远程分支)或重新启动等操作,就可以 post 新文章。
为避免这种情况,您可能希望将数据库文件存储在其他地方,但 运行 other databases 是更好的方法。
关于测功机的更多信息:https://devcenter.heroku.com/articles/dynos