如何在Heroku上传一个简单的网页,应用程序包括Peewee和Postgres?

时间:2016-12-23 09:27:45

标签: python postgresql heroku peewee heroku-postgres

我有一个app.py文件。我想在HEROKU上传。我已经看到在Heroku上传时需要进行一些更改,例如添加ProcfileRequirements.txt。我还添加了这两个。它在本地但在Heroku数据库上完美地工作并不是创建或连接。

我在终端上做了什么

  1. heroku create
  2. git push heroku master
  3. heroku addons:add heroku-postgresql
  4. heroku config:set HEROKU=1
  5. heroku ps:scale web=1
  6. heroku open
  7. 现在我的用户注册网页正在打开但无法保存。请帮忙

    app.py

    import os
    import urlparse
    import psycopg2
    from peewee import Model, CharField, SqliteDatabase, CharField, ForeignKeyField, IntegrityError
    from peewee import create_model_tables
    from flask import Flask, request, render_template, redirect, url_for, session
    from passlib.hash import sha256_crypt
    from flask_bootstrap import Bootstrap
    from flask_peewee.db import Database
    
    if 'HEROKU' in os.environ:
        DEBUG = False
        urlparse.uses_netloc.append('postgres')
        url = urlparse.urlparse(os.environ['DATABASE_URL'])
        DATABASE = {
            'engine': 'peewee.PostgresqlDatabase',
            'name': url.path[1:],
            'user': url.username,
            'password': url.password,
            'host': url.hostname,
            'port': url.port,
        }
    else:
        DEBUG = True
        DATABASE = {
            'engine': 'peewee.PostgresqlDatabase',
            'name': 'notes',
            'user': 'scrolldev',
            'password': 'scrolldev',
            'host': 'localhost',
            'port': 5432,
            'threadlocals': True
        }
    
    
    app = Flask(__name__)
    bootstrap = Bootstrap(app)
    app.config.from_object(__name__)
    db = Database(app)
    
    
    class User(db.Model):
        ....
    
    
    class Notepad(db.Model):
        ....
    
    def setup_db():
        create_model_tables([User, Notepad], fail_silently=True)
    
    ....
    ....
    ....
    if __name__ == '__main__':
        setup_db()
        app.secret_key = 'super_secret_key'
        app.run(debug=True)
    

    在提出这个问题之前,我也从这里获得了帮助,然后我更新了我的文件Stack Question

    更新 它在本地工作正常,但在heroku上没有。请帮帮我。

1 个答案:

答案 0 :(得分:0)

如果url中包含DATABASE_URL,您的代码会从'HEROKU'环境变量加载os.environ

if 'HEROKU' in os.environ:
    DEBUG = False
    urlparse.uses_netloc.append('postgres')
    url = urlparse.urlparse(os.environ["DATABASE_URL"])

...但是将其加载到条件之前几行:

from peewee import Model, PostgresqlDatabase

urlparse.uses_netloc.append('postgres')
url = urlparse.urlparse(os.environ['DATABASE_URL'])  # <--

根据您上面的评论,听起来这是一个错误。在开发计算机上设置DATABASE_URL(我建议使用;开发和生产之间的更改越少越好),或删除在url块之外设置if的代码。