所以我的问题是:我创建了一个运行正常的heroku应用程序,尽管当该应用程序重新启动时,数据库中的所有新记录都会被删除。当我"推送到heroku"时,从我的本地数据库中复制的那些仍然存在。
我是PostgresSQL的新手,但我仔细地按照指示将代码部署到heroku并设置数据库。这是我配置的一部分:
# defines the full path for the database
DATABASE_PATH = os.path.join(basedir, DATABASE)
# the database uri
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DATABASE_PATH
我知道最后一行不是应该如何建立与heroku数据库的连接(sqlite),尽管我仍然想知道发生了什么。
当我向数据库中添加数据时,我使用db.section.add(data)和db.section.commit()。我创建了一个heroku数据库,如下所示:
$ heroku addons:create heroku-postgresql:hobby-dev
重新启动应用程序时会发生什么?我可能遗漏了一些显而易见的东西。
编辑
@admin_blueprint.route('/modify/add-post/',methods=['GET', 'POST'])
@login_required
def add_post():
error = None
form = AddPostForm(request.form)
if request.method == 'POST':
if form.validate_on_submit():
now=datetime.datetime.now()
poster=session['adminname']
new_post = Post(form.text.data,poster, now,form.add_file.data)
db.session.add(new_post)
db.session.commit()
return redirect(url_for('home.posts'))
else:
return render_template("adm_posts.html",error=error,form=form)
if request.method == 'GET':
return render_template("adm_posts.html",form=form)
谢谢!
两件事-1)使用Heroku在环境中提供的配置连接到PostgreSQL实例。简单使用:
import os
SQL_ALCHEMY_DATABASE_URI = os.environ['DATABASE_URL']
环境变量DATABASE_URL
将由Heroku填充,并具有连接信息(主机、用户名、密码、数据库)。
2) Heroku文件系统是短暂的,在dyno重新启动之间不会持久存在。这就是sqlite
数据库消失的原因。