Рубрики
Без рубрики

Как запланировать задания в приложении Django с использованием планировщика Heroku

Автор оригинала: FreeCodeCapm Team.

Альфархан Захеди

Недавно я опубликовал свое первое приложение Django на Heroku.

Приложение довольно просто – он перечисляет счет, связанную с каждым классический Проблема на Споюс Отказ

Вы можете найти приложение Live здесь Отказ

Приложение использует библиотеки Python BS4 и Запросы Чтобы соскрести к содержимому вышеупомянутую веб-сайт, получить необходимые детали для каждой проблемы (а именно – код проблем, имя проблемы, пользователи и Оценка ) и храните их в базе данных.

Теперь счет, связанный с проблемами на Споюс это динамично. Он рассчитывается с использованием следующей формулы:

80/(40 + Number_of_people_who_have_seved_the_problem)

Итак, счет, связанный с проблемами на Споюс меняется как число_of_people_who_have_seved_the_problem изменения.

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

Теперь это мертвое простое приложение. Поэтому я хотел настроить планировщик с наименьшим количеством конфигурации и возможным кодом.

Пользовательские команды управления Django и планировщика Heroku на спасение!

Давайте понять наши два спасителя.

1. Пользовательские команды управления Django

Пользовательские команды управления Django структурированы как классы Python, которые наследуют свои свойства и поведение от django.core.management.base.basecommand класс.

Они используются для добавления Manage.py Действие для приложения Django. Runserver или мигрировать два таких действивания.

Типичный пример такого класса будет:

from django.core.management.base import BaseCommand
class Command(BaseCommand):    help = ""    def handle(self, *args, **options):        self.stdout.write("Hello, World!")

Класс должен быть назван Команда и подкласс BaseCommand Отказ

Помогите Должна провести краткое описание команды, которая будет напечатана в справочных сообщениях.

Ручка (я, * args, ** варианты) Определяет фактическую логику команды. В этом случае мы просто пишем строку Привет мир! на стандартный выход. В моем случае Ручка (я, * args, ** варианты) выполняет задачу соскабливания сайта – Spoj.com и обновление базы данных, если Оценка связано с любым из изменений проблемы.

Ручка (я, * args, ** варианты) автоматически запускается всякий раз, когда используется следующая команда:

Python Manage.py <имя сценария Python, содержащего управление CLA SS>

Если имя сценария, скажем, Script.py тогда команда будет:

Python Manage.py Script

Обратите внимание на метод ручки объявляет три входных аргумента: Я Для ссылки на экземпляр класса * args Чтобы ссылаться на аргументы самого метода, а ** Опция Содержит аргументы, переданные как часть команды управления.

Где в структуре проекта это script.py идти?

(Здесь Script.py относится к названию сценария, содержащего пользовательскую команду управления Django.)

Это довольно просто. Официальная документация объясняет это хорошо:

polls/    __init__.py    models.py    management/        __init__.py        commands/            __init__.py            _private.py            closepoll.py    tests.py    views.py

Моя структура проекта выглядит следующим образом:

spojscore│   .gitignore│   manage.py│   Procfile│   README.md│   requirements.txt│   runtime.txt│├───core│   │   admin.py│   │   apps.py│   │   models.py│   │   tests.py│   │   views.py│   │   __init__.py│   ││   ├───management│   │   │   __init__.py│   │   ││   │   ├───commands│   │         script.py│   │         __init__.py│   │     │   ││   ├───static│   │   └───core│   │       ├───css│   │       │       style.css│   │       ││   │       └───img│   │               favicon.png│   │               logo.png│   ││   ├───templates│       └───core│               core.html│└───spojscore        settings.py        urls.py        wsgi.py        __init__.py

Здесь Script.py Содержит пользовательскую команду управления – код Python для Scrape Spoj.com Соберите детали всех классический Проблемы и обновите базу данных соответственно.

Если вы видите, он расположен внутри Core \ Management \ команды Отказ

Если вы заинтересованы, вы можете найти Script.py здесь Отказ

Я думаю, что теперь ясно, что я могу соскребать spoj.com и получить нужные данные, просто работающие Python Manage.py Script от терминала.

Итак, чтобы обновить свою базу данных, мне просто нужно запустить вышеуказанную команду хотя бы раз в день.

2. Планировщик Heroku

Согласно Веб-сайт Heroku :

После того, как вы развертываете приложение, установите дополнение к добавлению планировщика Heroku.

Чтобы запланировать частоту и время работы на работу, откройте панель инструментов планировщика Heroku, найдя приложение в Мои приложения , нажав «Обзор», затем выберите «Heroku Scheduler» из установленного списка надстройки.

На панели инструментов планировщика нажмите «Добавить работу …», введите задачу, выберите частоту, Размер Dyno и следующее время выполнения.

В моем случае задача – это Python Manage.py Script , который должен быть выполнен ежедневно (частота), используя мои бесплатные Dynos (размер Dyno) в 00:00 UTC (следующее время выполнения).

Это оно!

Моя база данных будет обновлена в 00:00 UTC каждый день, и мне не нужно было установить какие-либо дополнительные библиотеки Python или писать любые дополнительные кусочки кода. Ура!

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

Некоторые окончательные примечания:

  • Официальный сайт Heroku говорит, что – «Ожидается, что выполнение задания планировщика ожидается, но не гарантировано. Планировщик известен иногда (но редко) пропустить выполнение запланированных заданий. Если запланированные задания являются критическими компонентами вашего приложения, Рекомендуется для Запустить пользовательский Часовой процесс вместо этого для большей надежности, контроля и видимости. “ Этот момент следует помнить при использовании планировщика Heroku. Мое мертвое простое приложение, которое использует планировщик Heroku, чтобы запустить простой сценарий только один раз в день. Итак, я думаю, это сделает отличную работу!
  • Мое приложение, я полагаю, полезен для конкурентных программистов. Почему? Я объяснил это очень подробно здесь Отказ
  • Вы можете найти исходный код моего приложения здесь Отказ

Кусок из моих личных размышлений:

Я просто еще один программист самоучатки.

Сейчас я пишу код на пару лет, и всегда хотел написать о моем опыте, усилиях, сбоях и успехах.

Но увы, я не мог.

Я думал, что мои начинания не были достаточно захватывающими или что мой опыт никому не помогут. И поэтому я сдержал себя от записи о них.

Честно говоря, я думаю то же самое сейчас.

Итак, как давай я написал эту статью?

Ну, это будет моим первым из многих статей.

И причина изменить, вы спрашиваете?

Рассылка.

На прошлой неделе, как обычно, я получил еженедельный бюллетень из CSS-Tricks – «На этой неделе в веб-дизайне и развитии« » Отказ

Здесь это выдержка из того же:

Вот и все. Те, кто вдохновил меня, чтобы написать о моих усилиях и опыте.

Может быть, ты должен тоже.