2016-04-06 24 views
2

İşte benim sorunum: Uygulama yeniden başlatıldığında, veritabanındaki tüm yeni kayıtlar silinmiş olsa da, beklendiği gibi çalışan bir heroku uygulaması oluşturdum. Yerel veritabanımdan "heroku'ya itildiğinde" kopyalananlar hala orada.Eklenen veritabanı kayıtları, uygulama yeniden başlatıldıktan sonra silinir (heroku/SQLAlchemy)

PostgresSQL konusunda yeniyim, ancak kodumu heroku'ya dağıtmak ve veritabanını ayarlamak için dikkatlice talimatları hazırladım. İşte benim konfigürasyonun parçası:

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

Geçen çizgi bir Heroku db ile bir bağlantısı (sqlite) kurulmalıdır değil nasıl olduğunu biliyorum, ben hala ne olup bittiğini bilmek istiyorum gerçi.

Veritabanıma veri eklediğimde db.session.add (data) ve db.session.commit() kullanın. ben şöyle bir Heroku veritabanı oluşturdu:

uygulama yeniden başlatıldığında ne olur
$ heroku addons:create heroku-postgresql:hobby-dev 

? Muhtemelen bariz bir şey eksik.

DÜZENLEME

@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) 

teşekkürler!

+1

Ben heroku hakkında bilmiyorum, ancak 'sqlite: ///' bana postgresql –

+0

bağlanmadığını söyleyerek, ben hala neler olup bittiğini bilmek isterim diye düşündüm. Çünkü yeniden başlatma olmadığında, veriler kaybolmaz. Ve neden yerel veritabanından veriler kopyalanır ve kaybolmaz. – Baekel

+0

db'ye yazdığınız kodunuzu gösterebilir misiniz? –

cevap

0

İki şey - 1) PostgreSQL örneğinize, Heroku'nun ortamda sağladığı yapılandırmayı kullanarak bağlanırsınız. Basitçe kullanın:

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

değişken DATABASE_URL Heroku tarafından doldurulur ve bağlantı bilgilerini (ana bilgisayar, kullanıcı adı, şifre, veritabanı) sahip olacak ortamı.

2) Heroku dosya sistemi ephemeral dur, ve dyno yeniden başlatmaları arasında kalmaz. Bu nedenle, sqlite veritabanınız kaybolur.

İlgili konular