Перенос базы данных PostgreSQL с OpenShift v2 на Heroku

С Heroku будем работать с помощью утилиты Heroku CLI, а с OpenShift — с  помощью rhc.

Подключаемся к серверу OpenShift по SSH.

rhc ssh ИМЯ_ПРИЛОЖЕНИЯ

На сервере делаем дамп базы данных.

pg_dump --format=c -f app-root/data/database.dump

Опция --format задает формат нужный для Heroku.

Уходим с сервера.

exit

Загружаем дамп с сервера OpenShift на локальный компьютер.

rhc scp ИМЯ_ПРИЛОЖЕНИЯ download ./ app-root/data/database.dupm

Файл дампа нужно загрузить в интернет, так, чтобы была прямая ссылка на файл (https://АДРЕС/database.dupm).

Восстанавливаем базу данных на Heroku из дампа.

heroku pg:backups:restore -a ИМЯ_ПРИЛОЖЕНИЯ 'https://АДРЕС/database.dupm'

Резервное копирование и восстановление данных на OpenShift

Сделать резервную копию или восстановить данные из резервной копии можно с помощью инструмента rhc.

Команда для резервирования


rhc snapshot-save -a имя_приложения

Эта команда останавливает приложение и архивирует его на локальный компьютер. Архив включает Git-репозиторий, дампы базы данных и прочую информацию.

Команда для восстановления


rhc snapshot-restore -f архив -a имя_приложения

Останавливает приложение и восстанавливает его из локального архива, который был создан командой резервирования.

Автоматизация резервирования

Делается с помощью скрипта и планировщика заданий.

Bash-скрипт.

#!/bin/bash

appname="имя приложения"
backup_dir="путь к папку с резервными копиями"
filename="${appname}_`date --utc +'%Y-%m-%d_%H-%M-%S_UTC'`.tar.gz"

cd "$backup_dir"
rhc snapshot-save -f "$filename" -a "$appname"

Скрипт резервирует приложение appname, добавляет метку времени к имени файла архива и размещает его в папке backup_dir.

Ссылки

Отладка Django-сайта на боевом сервере OpenShift

Ни в коем случае нельзя включать отладку на боевом сервере. Рекомендуется создать копию сервера, недоступную для пользователя.

В файле settings.py задается переменная DEBUG. Если при загрузке страницы произошла ошибка, то в зависимости от значения этой переменной выдается либо страница с HTTP ошибкой, либо страница с отладочной информацией.

На локальном сервере разработчика значение DEBUG равно True большую часть времени, а на боевом сервере значение DEBUG должно быть всегда равно False. Но можно создать тестовый сервер, копию боевого, где значением DEBUG можно управлять.

Следующий код позволяет включать и отключать отладку на локальном сервере и на сервере Openshift. Код располагается в файле settings.py.

import os
ON_PAAS = 'OPENSHIFT_REPO_DIR' in os.environ
LOCAL_DEBUG = True
ENV_DEBUG = os.environ.get('DEBUG') == 'True'

DEBUG = (not ON_PAAS and LOCAL_DEBUG) or (ON_PAAS and ENV_DEBUG)

if ON_PAAS and DEBUG:
    print("Warning: debug mode!")

Переменная ON_PAAS равна True если код выполняется на сервере Openshift, иначе она равна False. Переменная LOCAL_DEBUG включает или отключает локальную отладку.

При отключении отладки на локальном сервере в список ALLOWED_HOSTS должна быть добавлена строка ‘localhost’.

ALLOWED_HOSTS = ['localhost']

Включить отладку на сервере Openshift можно если создать переменную окружения DEBUG со значением True.

Управлять переменными окружения на Openshift можно с помощью инструмента rhc. Следующие команды включают отладку на сервере Openshift.

rhc env set DEBUG=True -a test
rhc app stop -a test
rhc app start -a test

Где test — это имя приложения. Первая команда устанавливает переменную окружения, а две другие перезапускают приложение.

Отключить отладку можно следующими командами.

rhc env unset DEBUG -a test
rhc app stop -a test
rhc app start -a test

Вместо первой команды можно использовать следующую команду.

rhc env set DEBUG=False -a test