Probé sin la base de datos, mi aplicación funciona muy bien, pero con peewee y postgres, no es capaz de crear ninguna tabla.
Probé diferentes métodos publicados en línea, pero no funciona, cualquiera que haya usado peewee en heroku, por favor, ayuda.
Mi modelo.py
if os.environ.get('DATABASE_URL'): DATABASE_URL = os.environ.get('DATABASE_URL') db = urlparse(DATABASE_URL) user = db.username password = db.password path = db.path[1:] host = db.hostname port = db.port database = PostgresqlDatabase(path, user=user, password=password, host=host, port=port) else: database = PostgresqlDatabase('heroku') class BaseModel(Model): class Meta: database = database class User(BaseModel): name = CharField() email = CharField(null=False, unique=True)Después de mover la tabla de creación de la instrucción if a la tabla de funciones de bienvenida, se crea.
@app.route('/') def welcome(): call('printenv') a = 'Default' b = 'Default' if os.environ.get('DATABASE_URL'): a = os.environ.get('DATABASE_URL') if os.environ.get('HEROKU'): b = os.environ.get('HEROKU') create_model_tables([Users], fail_silently=True) Users.insert(name='John', email='Doe').execute() return render_template('index.html', a=a, b=b) if __name__ == '__main__': app.run(port=5000, debug=True)"usuario" es una tabla reservada; intente:
class User(Model): ... class Meta: db_table = 'users'from playhouse.db_url import connect import settings local_url = 'postgresql://{}:{}@localhost:5432/{}'.format(settings.DB_USER, settings.DB_PASS, settings.DB_NAME) database = connect(os.environ.get('DATABASE_URL') or local_url) class BaseModel(Model): class Meta: database = databaseÚselo de esta manera, es fácil y hay muy pocas posibilidades de equivocarse.
Y debe crear una tabla antes if __name__ == '__main__: , esta declaración, porque en heroku proporciona configuraciones tales que, cualquier cosa debajo de eso no funcionará.
Como el mío uswgi.ini
[uwsgi] http-socket = :$(PORT) master = true die-on-term = true module = app:app memory-report = true module = app:app significa ejecutar la aplicación desde app.py no ejecutar app.py