2015-10-26 2 views
1

Моя структура каталогов содержит различные модули ..google app engine (gae), python-- Где взять задачу cron?

админа, апите, и т.д.

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

апи имеет собственный YAML файл: api.yaml

Безопасно предположить, что я должен поставить cron.yaml, в том же месте, api.yaml?

// ====== Будущие Примечания

Я был успешным в выполнении простой cronjob со следующими шагами

  1. cron.yaml в том же каталоге, api.yaml
  2. api.yaml оставили в покое
  3. Я добавил запись для нового маршрута к routes.py: маршрут ('/', crontask handlers.CronTaskHandler, методы = [ 'GET'])
  4. я создал ах andler в отдельном файле cron_task_handler.py, в котором содержится класс CronTaskHandler, содержащий def get (self)
  5. Я обновил каталог обработчика init.py, чтобы скрыть cron_task_handler.py импорт CronTaskHandler и поместить CronTaskHandler во весь список.
  6. Я обновил задачу хрон через терминал, перейдя в каталог, содержащий cron.yaml (API) и вошел appcfg.py -A <app_id> update_cron .
  7. Я побежал сервер разработки
  8. Я посетил Localhost: что-то/crontask URL-адрес в браузере
  9. Я перешел на консоль администратора и увидел мое задание cron под ссылкой cron jobs.

cron.yaml

cron: 
- description: something 
    url: /crontask 
    schedule: every 1 minutes 

cron_task_handler.py

class CronTask(base_class): 
    def get(self): 
     print "hello, this is a cron job" 

ответ

2

cron.yaml конфигурации является приложением конфигурации уровня, не является модулем конфигурации. Конкретные задачи могут быть направлены на конкретные модули, основанные на содержании cron.yaml и dispatch.yaml.

Я бы держать его на верхнем уровне приложения, как это было предложено в Module configuration doc:

Дополнительные файлы конфигурации прикладного уровня (dispatch.yaml, cron.yaml, index.yaml, и очередь. yaml) включены в каталог верхнего уровня .

Примечание: в нескольких модулей приложений, которые вы можете потребность использовать appcfg.py update_cron как обычный appcfg.py update для некоторых/всех модулей может не обновлять cron.yaml.

+0

Итак, у меня на самом деле нет «верхнего уровня», все в модуле, с отдельными файлами yaml для каждого модуля .. так что да, у меня многомодульное приложение. Представляете ли вы, что он должен быть размещен, сам по себе, как единственный файл, вне всех модулей? –

+0

Ну, после тестирования, похоже, что можно с уверенностью предположить, что он принадлежит в том же каталоге, что и api.yaml –

+0

Вы имеете в виду, что все в _directory_ (простой случай приложения в документе)? Это тоже работает, но это может запутаться по дороге, так как ваше приложение растет. В этом случае да, вы можете поместить файл 'cron.yaml' в тот же каталог. –

0

Если вы хотите запустить хроны в конкретном модуле приложения, вы можете указать target строки в вашем cron.yaml

- description: something 
    url: /crontask 
    schedule: every 1 minutes 
    target: api 

Так вот ваш хрон будет направлен к версии по умолчанию из модуль с именем api.

Это хорошо документированы в этой вики About cron.yaml

Строка target предваряет имя хоста вашего приложения. Обычно это имя . Задача cron будет перенаправлена ​​на версию по умолчанию именованного модуля. Обратите внимание, что если версия модуля по умолчанию изменится, задание будет запущено в новой версии по умолчанию.

Если нет модуля с именем назначенного target, имя предполагается версия приложения и App Engine попытается маршрутизировать работы этой версию

.

+0

приятный отзыв. Благодаря :) –

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