2017-02-22 28 views
1

Используя Google App Engine, у меня есть приложение myapp в качестве службы по умолчанию, которая добавляет задачу в очередь задач и запускает работника фонового сервиса с именем optimize. Хотя myapp работает нормально, к сожалению, я всегда вижу ошибку POST 404 в журнале myapp, когда очередь задач AppEngine пытается запустить URL-адрес /optimize-dot-myapp.appspot.com/index.php/optimize. Конечно, из-за ошибки 404 очередь задач продолжает повторять попытку. Мой текущий файл optimize.yaml содержит следующее. Есть предположения?Каков правильный YAML для запуска службы в Google App Engine?

# optimize.yaml configuration for Google App Engine 
# Full details at: https://cloud.google.com/appengine/docs/php/config/appref 
runtime: php55 
api_version: 1 
service: optimize 

handlers: 
# Serve php scripts. 
- url: /index.php/optimize 
    script: index.php/optimize 

по умолчанию app.yaml файл содержит следующее:

# app.yaml configuration for Google App Engine 
# Full details at: https://cloud.google.com/appengine/docs/php/config/appref 
runtime: php55 
api_version: 1 

handlers: 
# Serve php scripts. 
- url: /(.+\.php).* 
    script: \1 
- url:/
    script: index.php 

# All URLs beginning with /assets are treated as paths to 
# static files in the assets/ directory. 
- url: /assets 
    static_dir: assets 

В случае, если это полезно, то optimize работник запускается в очереди задач по умолчанию с помощью следующей PHP:

// Start the background worker 
// API details: https://cloud.google.com/appengine/docs/php/refdocs/classes/google.appengine.api.taskqueue.PushTask 
$url = '/optimize-dot-myapp.appspot.com/index.php/optimize'; 
$task = new PushTask($url, $param); 
$task_name = $task->add(); 
+0

Как выглядит ваш файл по умолчанию '.yaml'? –

+0

@DanCornilescu Я отредактировал комментарии, чтобы показать по умолчанию 'app.yaml'. Вызывающее приложение работает нормально. Похоже, что вещи застревают, когда очередь задач по умолчанию пытается запустить «оптимизатора». – Frank

ответ

1

Вы столкновений в характере URL пути. Путь /index.php/optimize соответствует шаблону url /index.php/optimize от optimize.yamlи/(.+\.php).* модель от app.yaml. Вероятно, запрос заканчивается в службе default вместо optimize. Простота подтверждения: проверьте журналы приложений, вы можете выбрать конкретную услугу, и вы увидите, какая услуга получила запрос.

Я хотел бы добавить dispatch.yaml файл, чтобы прояснить вещи и исключить возможность неоднозначного маршрутизации (нет необходимости указывать модуль по умолчанию, ничего не соответствующие правилам отправки отправляется в модуль по умолчанию):

application: my_app 
dispatch: 
    - url: "*/optimize/*" 
    module: optimize 

Тогда настроить шаблоны URL соответственно в optimize.yaml (все они должны начинаться с /optimize):

- url: /optimize/index.php 
    script: index.php 

Примечание: файл index.php упоминалось выше, будет в optimize сервис dir, а не в default сервис один. Предполагая здесь, что каждая служба имеет свой собственный каталог, как указано в Can a default service/module in a Google App Engine app be a sibling of a non-default one in terms of folder structure?

И в коде задания очереди URL должен содержать только путь запроса, а не имя хоста (которое интерпретируется как часть пути, что вызывает несоответствие с шаблоном url обработчика).Вы хотите:

$url = '/optimize/index.php'; 
+0

все это хорошие предложения. Благодаря! По причинам, которые я не совсем понимаю, только использование 'dispatch.yaml' не направило запросы на службу' optimize', однако, как только я удалил имя хоста из кода очереди, он начал получать запросы. – Frank

+0

Я обновлю ответ, мой комментарий об этом был фактически неправильным (я использую python, я думал, что это специфичная для PHP вещь) –

0

В Google App Engine, приложения определяют очереди задач в файле конфигурации queue.yaml. Вы можете использовать queue.yaml для настройки как push queues, так и pull queues.

В следующем базовом примере, который определяет именем очереди и переопределяет скорость обработки по умолчанию:

queue: 
- name: my-push-queue 
    rate: 1/s 

Ниже приводится более сложный пример конфигурации queue.yaml, что демонстрирует настройки повторных попыток задач и модификации по умолчанию.

queue: 
- name: fooqueue 
    rate: 1/s 
    retry_parameters: 
    task_retry_limit: 7 
    task_age_limit: 2d 
- name: barqueue 
    rate: 1/s 
    retry_parameters: 
    min_backoff_seconds: 10 
    max_backoff_seconds: 200 
    max_doublings: 0 
- name: bazqueue 
    rate: 1/s 
    retry_parameters: 
    min_backoff_seconds: 10 
    max_backoff_seconds: 200 
    max_doublings: 3 

Пожалуйста, прочтите this документацию для получения более подробной информации

+0

Я использую очередь push по умолчанию. @bravin Я думаю, что есть другая проблема, потому что согласно [queue.yaml documentation] (https://cloud.google.com/appengine/docs/standard/php/config/queueref) «Этот файл конфигурации является необязательным для очередей push , которые имеют очередь по умолчанию. " – Frank

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

  • Нет связанных вопросов^_^