Використання heroku для розгортання веб-додатки на django

Я не буду детально описувати весь процес розгортання Django-додатки, тому що він добре описаний в офіційному керівництві. У цій статті я тільки зроблю короткий конспект і опишу деякі проблеми, з якими я зіткнувся.

Розгортання Django-додатки на Heroku

Отже, щоб розгорнути додаток на Heroku потрібно виконати наступні команди:
Можна перевірити стан нод за допомогою команди ps:
Лог можна подивитися за допомогою команди log:
Запускати команди Django можна за допомогою команди run:

Проблема з оновленням пакетів Python

Прямого доступу до віртуального оточення немає, тому я не міг змусити Heroku оновлювати Django до останньої мінорній версії автоматично. Зараз поясню докладніше. Припустимо, що коли проект створювався, була актуальна версія Django 1.7.3, а сьогодні актуальна версія 1.7.8. Можна при кожному виході нової версії Django міняти requirements.txt, але я хочу щоб пакети оновлювалися автоматично.

Зазвичай я це роблю так:
А в requirements.txt у мене такий рядок:
Так ось, якщо вказати в requirements.txt, що я хочу версію Django молодше 1.8, то стара версія 1.7.3 не оновиться, бо 1.7.3 теж молодше 1.8. На StackOverflow є кілька обговорень на цю тему:
  • How to customize pip's requirements.txt in Heroku on deployment?
  • How do I upgrade a dependency in a Python project on Heroku

Проблема з налаштуванням Django-додатки в різних середовищах

Зазвичай додаток існує на різних комп'ютерах в різних версіях. Один із шаблонів автоматичної зміни налаштувань програми - це імпорт додаткових налаштувань в settings.py.
Зазвичай я видаляв потрібні файли за допомогою свого скрипта для розгортання проектів. Але Heroku сам розгортає додаток, і бере все, що є в репозиторії. Вирішити цю проблему можна як мінімум двома способами:
  • використовувати різні гілки з різними масками в .gitignore для різних оточень,
  • використовувати змінні оточення Heroku.
Другий шлях мені здається більш простим.
Змінну оточення в Heroku додатку можна створити за допомогою команди:
Тепер кінець мого файлу settings.py виглядає так:

додаткова інформація

Схожі статті