2016-04-06 15 views
2

私の問題は次のとおりです:アプリケーションが再起動されると、データベースのすべての新しいレコードが削除されます。私が "herokuにプッシュ"したときにコピーされたローカルデータベースのものはまだそこにあります。追加されたデータベースレコードは、アプリケーションの再起動後に削除されます(heroku/SQLAlchemy)

私は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のDBでの接続は、(sqliteの)を設立する方法ではないことを知っています。

データベースにデータを追加すると、db.session.add(data)とdb.session.commit()が使用されます。アプリを再起動したときに何が起こる

$ heroku addons:create heroku-postgresql:hobby-dev 

: は、私はそうのようなHerokuのデータベースを作成しましたか?私はおそらく明らかに何かが欠けているでしょう。

EDIT

@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についてはわかりませんが、 'sqlite:///'はpostgresqlに接続していないことを伝えています –

+0

これは私が思ったことですが、私はまだ何が起こっているのか正確に知りたいです。なぜなら、再起動がなければ、データは消えないからです。そして、なぜローカルデータベースからのデータがコピーされ、消えないのか。 – Baekel

+0

データベースに書き込んでいるコードを表示できますか? –

答えて

0

2つのこと - 1)Herokuが環境内で提供する設定を使用してPostgreSQLインスタンスに接続します。単純に使用します。

import os 
SQL_ALCHEMY_DATABASE_URI = os.environ['DATABASE_URL'] 

環境変数DATABASE_URLは、Herokuのが移入、および接続情報(ホスト、ユーザ名、パスワード、データベースを)持っています。

2)Herokuファイルシステムはephemeralであり、dyno再起動の間は維持されません。だからあなたのsqliteデータベースが消えるのです。

関連する問題