Как мне подключиться к базе данных MySQL в WebFaction, используя Peewee ORM?

Я успешно загрузил свое веб-приложение в webfaction, но заметил, что при использовании peewee для подключения к базе данных MySQL в моей учетной записи webfaction я получил эту ошибку:

ProgrammingError: (1146, "Table 'TABLEGOESHERE' doesn't exist")

Точная ошибка в файле журнала ошибок ниже

Некоторая справочная информация:

  • Я создал базу данных MySQL на веб-фракции

  • Я не создавал никаких таблиц в панели управления, предоставляемой сервисом. Это абсолютно пусто.

  • Я могу успешно запустить приложение фляги через терминал, но я собираюсь запустить его на веб-сервере, поэтому я очень новичок в этом процессе.

Я предположил, что когда вы используете peewee, вы можете создавать таблицы внутри вашей программы следующим образом:

models.py

# -- Peewe Modules
from peewee import *

DATABASE = MySQLDatabase("DBNAMEGOESHERE", host="HOSTGOESHERE", port=PORTGOESHERE, user="USERGOESHERE", passwd="PASSGOESHERE")

# -- DATABASE OBJECTS GO HERE:

#-- INIT
def initialize():
    DATABASE.connect()
    DATABASE.create_tables([Post, etc...],safe=True)
    DATABASE.close()

Функция инициализации вызывается в файле __init__.py внизу файла следующим образом:

if __name__ == "__main__":
    models.initialize()
    try:
        models.User.create_user(
            username = 'user',
            email = 'email',
            password = 'pass',
            is_admin = True,
            confirmed = True,
            confirmed_on = datetime.datetime.now(),
        )
    except ValueError:
        pass
    app.run()

Мое представление индекса, которое направляется к ('/') в моем файле __init__.py, вызывает метод count следующим образом:

count = models.Post.select().count()

И я полагаю, что эта строка заставила мой сайт отображать внутреннюю ошибку 500, что привело к этому журналу ошибок (временные метки были удалены для простоты):

return self.wsgi_app(environ, start_response)

File "/home/username/webapps/myapp/myapp/__init__.py", line 49, in __call__
return self.app(environ, start_response)

File "/home/username/lib/python2.7/Flask-0.10.1-py2.7.egg/flask/app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))

File "/home/username/lib/python2.7/Flask-0.10.1-py2.7.egg/flask/app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)

File "/home/username/lib/python2.7/Flask-0.10.1-py2.7.egg/flask/app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()

File "/home/username/lib/python2.7/Flask-0.10.1-py2.7.egg/flask/app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)

File "/home/username/lib/python2.7/Flask-0.10.1-py2.7.egg/flask/app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)

File "/home/username/lib/python2.7/Flask-0.10.1-py2.7.egg/flask/app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()

File "/home/username/lib/python2.7/Flask-0.10.1-py2.7.egg/flask/app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)

File "/home/username/webapps/myapp/myapp/__init__.py", line 587, in index
count = models.Post.select().count()

File "/home/username/lib/python2.7/peewee-2.7.3-py2.7.egg/peewee.py", line 2792, in count
return self.aggregate(convert=False) or 0

 File "/home/username/lib/python2.7/peewee-2.7.3-py2.7.egg/peewee.py", line 2785, in aggregate
return self._aggregate(aggregation).scalar(convert=convert)

File "/home/username/lib/python2.7/peewee-2.7.3-py2.7.egg/peewee.py", line 2564, in scalar
row = self._execute().fetchone()

File "/home/username/lib/python2.7/peewee-2.7.3-py2.7.egg/peewee.py", line 2555, in _execute
return self.database.execute_sql(sql, params, self.require_commit)

File "/home/username/lib/python2.7/peewee-2.7.3-py2.7.egg/peewee.py", line 3366, in execute_sql
self.commit()

File "/home/username/lib/python2.7/peewee-2.7.3-py2.7.egg/peewee.py", line 3212, in __exit__
reraise(new_type, new_type(*exc_args), traceback)

File "/home/username/lib/python2.7/peewee-2.7.3-py2.7.egg/peewee.py", line 3359, in execute_sql
cursor.execute(sql, params or ())

 File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)

File "/usr/lib64/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
   raise errorclass, errorvalue
ProgrammingError: (1146, "Table 'DATABASENAMEHERE.post' doesn't exist")

Может ли кто-нибудь помочь мне определить и устранить эту проблему? Я понятия не имею, как заставить мое приложение фляги взаимодействовать с моей базой данных MySQL при веб-фракции.

2 ответа

Решение

Код инициализации моего сервера перенесен в файл, который запускает приложение Flask в Webfaction. Не рекомендуется размещать дополнительный код под условным условием, так как он предназначен для командной строки.

Вы уверены, что ваше приложение запускается, выполняя его прямо из командной строки? то есть __name__ == '__main__' блок на самом деле работает? Возможно ли, что вы используете выделенный сервер WSGI вместо этого?

Другие вопросы по тегам