![]()
Давно, знаете ли, хотел попробовать что-то облачное в боевом режиме. http://ep.io — радует больше всех. У них есть специальная консольная утилита, которая позволяет в несколько команд развернуть весь мой django, flask или даже просто python-проект через mod_wsgi.Самое сложное, с чем пришлось столкнуться — настройка работы со статическими файлами и папкой, которая доступна на запись. По умолчанию все папки доступны только для чтения.
Очень просто решить эту проблему, дописав в settings.py всего один блок (в моём случаи он одновременно подходит и для работы с почтой. Если сервер запущен локально — то почта выводится в консоль, если на ep.io — отправляется через мой google account):
import os
DIRNAME_TO_PROJECT = os.path.dirname(__file__)
try:
from bundle_config import config
# For uploading files
DIRNAME_TO_WRITABLE_DIR = config['core']['data_directory'] # Writable directory
# For e-mail
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER = 'dimkat@gmail.com'
EMAIL_HOST_PASSWORD = 'passphrase'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
except:
# For uploading files
DIRNAME_TO_WRITABLE_DIR = os.path.dirname(__file__) # Writable directory on local disc
# For e-mail
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
Не стоит забывать про настройки самого django для каталогов media и static. Чтобы небыло путаницы, приведу весь набор опций:
MEDIA_ROOT = DIRNAME_TO_WRITABLE_DIR+'/media/'
MEDIA_URL = '/media/'
STATIC_ROOT = ''
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'
STATICFILES_DIRS = (
DIRNAME_TO_PROJECT+'/static',
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)
И главное не забыть сообщить самому epio, что каталог static, лежащий в той же директории, где и сам проект, необходимо обрабатывать не gunicorn/django, а сразу nginx'ом. Для этого отредактируем файл epio.ini
Раскомментируйте 2 строки:
[static] /static = static
Всё. Прозрачно ведём разработку и прозрачно деплоим в облачный хостинг в любой момент одной командой.