search

Showing posts with label flask. Show all posts
Showing posts with label flask. Show all posts

Thursday, February 18, 2016

Set up logging with Flask and gunicorn

Let's say that we want to be able to log in the specified log file and syslog. Our application - is a simple app.py file. The first step, I suggest, is to set logger name:
import os

from flask import Flask


app = Flask(__name__)
app.logger_name = "flask.app"

# ...

if __name__ == "__main__":
    app.run()
You can log in your project like this:
app.logger.info("Hello")
A log configuration file for the gunicorn may look something like this:
[loggers]
keys=root, gunicorn.error, gunicorn.access, requests.packages.urllib3.connectionpool, __main__

[handlers]
keys=log_file, syslog

[formatters]
keys=generic

[logger_root]
level=INFO
handlers=log_file, syslog

[logger___main__]
level=DEBUG
handlers=log_file, syslog
propagate=0
qualname=__main__

[logger_gunicorn.error]
level=INFO
handlers=log_file, syslog
propagate=0
qualname=gunicorn.error

[logger_gunicorn.access]
level=INFO
handlers=log_file, syslog
propagate=0
qualname=gunicorn.access

[logger_requests.packages.urllib3.connectionpool]
level=WARN
handlers=log_file, syslog
propagate=0
qualname=requests.packages.urllib3.connectionpool

[handler_syslog]
class=logging.handlers.SysLogHandler
formatter=generic
args=()

[handler_log_file]
class=logging.FileHandler
formatter=generic
args=('/home/myuser/log/gunicorn.log',)

[formatter_generic]
format=%(asctime)s [%(process)d:%(name)s:%(lineno)s] [%(levelname)s] %(message)s
datefmt=%Y-%m-%d %H:%M:%S
class=logging.Formatter
The last step is starting gunicorn:
gunicorn app:app --log-config /home/myuser/gunicorn_logging.conf

Monday, October 20, 2014

fedora 20: Установка mysql

С версии 19 в fedora MySQL база данных заменена на MariaDB, которая обеспечивает полную совместимость.

Установим базу данных:
sudo yum install mariadb mariadb-server

Стартуем сервис:
sudo service mysqld start

И запускаем настройку:
mysql_secure_installation

При первом запуске программа запросит ввести root пароль, просто нажмите Enter, а вот на 2ом шаге введите реальный пароль. Ответьте на остальные вопросы.

Запускаем sql консоль для создания базы данных:
mysql -u root -p

Новая база данных создается командой:
CREATE DATABASE techtips
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;

Выйти из консоли можно командой:
\q

Пример настроек для Flask + SQLAlchemy:
SQLALCHEMY_DATABASE_URI = 'mysql+mysqldb://root:12345@localhost/techtips?charset=utf8&use_unicode=0'

PythonAnywhere: Настройка MySQL

В данный момент PythonAnywhere поддерживает только MySQL как бесплатную базу данных (обещают скоро добавить поддержку Postgresql ). Начнем с создания базы данных. Для этого необходимо перейти на вкладку Databases и в поле Create database ввести имя базы данных:

Также надо установить пароль для доступа к базе данных. Путь базы данных для sqlalchemy будет выглядеть так:
SQLALCHEMY_DATABASE_URI = 'mysql+mysqldb://pa_username:db_password@mysql.server/db_name'

где pa_username - имя пользователя на PythonAnywhere, db_password - пароль к базе данных, db_name - имя базы данных (например, jsnjack$main-mysql).

Для того, чтобы sqlalchemy работала с mysql надо установить пакет:
pip install MySQL-python

PythonAnywhere: Настройка wsgi для приложения Flask

Предположим, что используется virtualenv. *wsgi.py выглядит следующим образом:
activate_this = '/home/jsnjack/jsn-techtips/env/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

import sys

path = '/home/jsnjack/jsn-techtips'
if path not in sys.path:
sys.path.append(path)

from app import create_app
application = create_app('pythonanywhere')


Первые 2 строки - эквиваленты source ./env/bin/activate на локальной копии. Path - путь к приложению. create_app() - функция, которая возвращает flask-приложение (и это едиственное условие для правильной конфигурации - присвоить переменной application приложение Flask), "pythonanywhere" - профиль конфигурации.

Код для create_app и профилей создан на основе flasky