2016-04-06 9 views
2

Also hier ist mein Problem: Ich erstellte eine Heroku-App, die wie erwartet funktioniert, obwohl beim Neustart der App alle neuen Datensätze in der Datenbank gelöscht werden. Diejenigen aus meiner lokalen Datenbank, die kopiert wurden, als ich "nach Heroku" schob, sind immer noch da.Hinzugefügt Datenbank Datensätze werden nach dem Neustart App gelöscht (heroku/SQLAlchemy)

Ich bin neu in PostgresSQL, aber ich folge sorgfältig Anweisungen, um meinen Code zu Heroku zu implementieren und die Datenbank einzurichten. Hier ist ein Teil meiner Konfiguration:

# defines the full path for the database 
DATABASE_PATH = os.path.join(basedir, DATABASE) 
# the database uri 
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DATABASE_PATH 

Ich weiß, dass letzte Zeile ist nicht, wie eine Verbindung mit einem Heroku db aufgebaut werden soll (SQLite), obwohl ich immer noch wissen möchte, was geschieht.

Wenn ich Daten zu meiner Datenbank hinzufüge, verwende ich db.session.add (data) und db.session.commit(). Ich habe eine Heroku Datenbank wie folgt:

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

Was passiert, wenn die Anwendung neu gestartet wird? Vermutlich vermisse ich etwas Offensichtliches.

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) 

Dank!

+1

Ich weiß nicht über Heroku, aber 'sqlite: ///' sagt mir, dass Sie keine Verbindung zu postgresql –

+0

Das ist, was ich dachte, obwohl ich immer noch gerne wissen würde, was genau los ist. Wenn kein Neustart stattfindet, verschwinden die Daten nicht. Und warum die Daten aus der lokalen Datenbank kopiert werden und nicht verschwinden. – Baekel

+0

Können Sie Ihren Code zeigen, der in die db schreibt? –

Antwort

0

Zwei Dinge - 1) Sie stellen eine Verbindung zu Ihrer PostgreSQL-Instanz mit der Konfiguration her, die Heroku in der Umgebung bereitstellt. Verwenden Sie einfach:

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

Die Umgebungsvariable DATABASE_URL von Heroku bevölkert werden, und haben die Verbindungsinformationen (Host, Benutzername, Passwort, Datenbank).

2) Das Heroku-Dateisystem ist ephemeral, und nicht zwischen Dyno Neustarts persistiert. Aus diesem Grund verschwindet Ihre sqlite Datenbank.