styleru.py lecture 9

ilebedev

			styleru.py
		

Сегодня в программе

Логирование

Логирование

Чем logging круче, print:

Логирование

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

for friend in vk_api.get_friends():
	logger.debug('processing %s...' % friend)
		try:
			print vk_api.get_audios(friend.id)
		except VkApiError:
			logger.error('API error occured')
	logger.debug('\tfinished')
		

Логирование

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

for friend in vk_api.get_friends():
	logger.debug('processing %s...' % friend)
		try:
			print vk_api.get_audios(friend.id)
		except VkApiError:
			logger.error('API error occured')
	logger.debug('\tfinished')
		

Логирование

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

for friend in vk_api.get_friends():
	logger.debug('processing %s...' % friend)
		try:
			print vk_api.get_audios(friend.id)
		except VkApiError:
			logger.error('API error occured')
	logger.debug('\tfinished')
		

Логирование

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

for friend in vk_api.get_friends():
	logger.debug('processing %s...' % friend)
		try:
			print vk_api.get_audios(friend.id)
		except VkApiError:
			logger.error('API error occured')
	logger.debug('\tfinished')
		

Логирование

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

for friend in vk_api.get_friends():
	logger.debug('processing %s...' % friend)
		try:
			print vk_api.get_audios(friend.id)
		except VkApiError:
			logger.error('API error occured')
	logger.debug('\tfinished')
		

Логирование

import logging
logger = logging.getLogger()
logger.setLevel(logging.ERROR)

for friend in vk_api.get_friends():
	logger.debug('processing %s...' % friend)
		try:
			print vk_api.get_audios(friend.id)
		except VkApiError:
			logger.error('API error occured')
	logger.debug('\tfinished')
		

Сервер

Сервером называется компьютер, выделенный из группы персональных компьютеров (или рабочих станций) для выполнения какой-либо сервисной задачи без непосредственного участия человека.

Сервер

Обычный компьютер с удалённым доступом, который стоит в каком-то дата-центре.

Хостинг

Услуга по предоставлению ресурсов (в т.ч. серверов).

Облачный хостинг

Услуга по предоставлению ресурсов (в т.ч. виртуальных серверов).

Хостеры

Что нужно для запуска python-приложения на сервере

Основные функции веб-сервера

Какие бывают веб-серверы

Какие бывают веб-серверы

Что нужно для запуска python-приложения на сервере

Что нужно для запуска python-приложения на сервере

Что нужно для запуска python-приложения на сервере

xWSGI

Что нужно для запуска python-приложения на сервере

само приложение

# server.py
from bottle import Bottle, run

app = Bottle()

@app.route('/hello/<name>')
def index(name):
    return template('<b>Hello {{name}}</b>!', name=name)
if __name__ == '__main__':
	run(app=app, host='localhost', port=8080)
		

wsgi-интерфейс

# aori_rc.uwsgi
[uwsgi]
#application's base folder
base = /home/ilebedev/src/aori_rc
app = server
home = /home/ilebedev/.virtualenvs/aori_rc
pythonpath = /home/ilebedev/.virtualenvs/aori_rc/bin/python
#socket file's location
socket = /tmp/aori_rc.uwsgi.sock
		

веб-сервер

# aori_rc.nginx.conf
server {
    listen      80;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/aori_rc.uwsgi.sock;
    }

    access_log  /var/log/aori_rc.access.log;
}
		

полный вперёд!


sudo service uwsgi start
sudo service nginx start
		

Развёртывание кода

Развёртывание кода

Развёртывание кода

Всё это можно сделать руками

Развёртывание кода

Ну а если серьёзно, автоматизация развёртывания нужна, чтобы развёртывание было

Как?

Как?

Fabric

# fabfile.py
from fabric import api

env.hosts = ['python.aori.ru']
def install_libs():
	api.sudo('apt-get install python-dev')

def get_src():
	with api.cd('/var/www/'):
		api.run('git clone python.ci.aori.ru/path/to/repo.git')

def bootstrap():
	install_libs()
	get_src()
		

Fabric


$ fab bootstrap
		

CI

CI

CI

CI

Что осталось?

Слепая деситепальцевая печать