当我在heroku上重新部署我的烧瓶应用程序时,为什么我不能保留最近发表的文章?

时间:2018-02-25 05:51:00

标签: python heroku flask flask-sqlalchemy heroku-toolbelt

我编写了一个简单的脚本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上运行我的服务器,这是很正常的)

2 个答案:

答案 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