当我在 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