2013-09-21 4 views
2

Я рассматривал новый «Modules API» в appengine и пытаюсь организовать приложение таким образом, что самые сложные задачи маршрутизируются через dispatch.yaml в более мощные экземпляры через конфигурации модулей.Как запустить appengine mapreduce jobs в модуле?

Однако при попытке сконфигурировать «/mapreduce/» ури в диспетчере они, похоже, не работают в правильном модуле, они всегда работают в модуле по умолчанию.

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

application: simple-sample 
dispatch: 
    - url: "*/mapreduce/*" 
    module: bigger-instance 

    - url: "*/_ah/pipeline/*" 
    module: bigger-instance 

модули определяются как документация состояния, по умолчанию в app.yaml и больше инстанции в bigger-instance.yaml, содержащее записи обработчика MapReduce, но до сих пор каждый MapReduce/* процесс выполняется в обработчике по умолчанию в соответствии с журналами, получая 404, поскольку обработчики определены в другом месте.

Любые идеи?

ответ

3

Самый простой вариант - установить свойство target вашего конвейера mapreduce.

pipeline = mapreduce.mapreduce_pipeline.MapreducePipeline(...) 
pipeline.with_params(target="version-dot-module") 
pipeline.start() 

Этот target передается в очереди задач и перекрывает очередь задач default routing, которые вы испытываете. Если нет соответствующей версии указанного модуля, используется версия модуля по умолчанию. Вы можете указать только "version", и в этом случае применяется модуль по умолчанию. Указание несуществующего модуля будет нацелено на стандартную версию модуля по умолчанию, даже если имеется соответствующая версия модуля по умолчанию.


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

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