2016-08-02 6 views
1

Я искал решение для своего приложения, которое, похоже, не обсуждалось нигде. Моя цель - опубликовать приложение и автоматически обратиться к серверу, с которым я работаю. Это просто должна быть простая Почта. У меня все работает нормально, и я в настоящее время решаю эту проблему с заданием cron, но этого недостаточно. Я хотел бы, чтобы работа выполнялась автоматически после публикации приложения, а не через минуту (или в зависимости от того, какое время оно было может быть установлено).Google App Engine - запустить задачу при публикации

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

Есть ли решение этой проблемы? Я посмотрел на «Очереди задач» и не уверен, что это то, что я ищу.

Любая помощь будет принята с благодарностью. Спасибо.

+0

Под «публикацией» вы имеете в виду, когда вы развертываете новую версию приложения, и только потом? Если появится новый экземпляр вашего приложения, должен ли он вызвать запрос POST? Если вы хотите, чтобы это произошло, когда вы публиковали новую версию приложения, я бы назвал это «разводным крюком», как этот вопрос: http://stackoverflow.com/questions/4354647 –

+0

Желаемое поведение происходит только тогда, когда новая версия приложения была развернута.Я полагаю, что «разворачивать крюк» - это терминология, которая может быть использована для обсуждения этого вопроса. Я исследую эту тему, и если я приду к решению, я отправлю это обратно сюда. В противном случае просто предположим, что я все еще работаю над этим. – john14073

ответ

0

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

Вот очерк о том, как вы можете подходить к нему.

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

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

В вас Разминка обработчик или appengine_config.py захватить версию развернутого

затем в транзакции попытаться принести новый HasRun примитив ключ (номер версии).

Если вы получаете объект Entity, тогда не запускайте единовременный код. Если вы не можете найти его, тогда создайте его и запустите единовременный код либо в задаче (убедитесь, что процесс идемпотент, так как задачи могут быть повторены), либо в запросе разминки/фронта.

Теперь вы, вероятно, захотите обернуть все это в операции CAS memcache, чтобы обеспечить блокировку или какой-либо вид. Чтобы предотвратить попытку какого-либо другого экземпляра сделать то же самое.

Альтернативно, если вы хотите использовать очередь задач, подумайте над назначением задачи номером версии, вы можете отправить заявку только с определенным именем один раз. Он по-прежнему должен быть idempotent (снова можно планировать повторить попытку), но для этой версии запланировано только одно задание - по крайней мере, на несколько недель.

Или комбинация/изменение всего вышеперечисленного.

2

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

Смежные вопросы