Служба Google App Engine, обслуживающая файлы по умолчанию

У меня есть две разные службы в моем приложении App Engine, которые называются auth и app. Служба аутентификации работает отлично, изображения, css, js и php обслуживаются и выполняются правильно. Служба аутентификации также была моей службой по умолчанию, когда я впервые запустил приложение App Engine.

Моя проблема в службе приложений. Сначала все, что я получал, было просто кучей слишком большого количества ошибок перенаправления, но потом я смог это исправить, но теперь ни один из CSS JS или изображений не обслуживается должным образом службой приложения. Единственный CSS, который обслуживается, на самом деле из службы аутентификации, и JS не обслуживается, и есть одно фоновое изображение из обслуживаемой службы аутентификации. Опять же, это две совершенно разные вещи, и они даже живут в своем собственном поддомене.

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

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

runtime: php73
service: app
entrypoint: serve /approuter.php

handlers:

- url: /assets
  static_dir: assets

# Serve static files as static resources.
- url: /(.+\.(gif|png|jpg|svg|webp|jpeg|js))$
  static_files: \1
  upload: .+\.(gif|png|jpg|svg|webp|jpeg|js)$

- url: /style
  static_dir: style

- url: /js
  static_dir: js

- url: /.*
  script: auto

А это мой dispatch.yaml:

dispatch:

  - url: "app.example.com/"
    service: app

  - url: "auth.example.com/"
    service: auth

Итак, вот, наконец, мой вопрос:
Как я могу добиться реального разделения проблем, когда речь идет о разных службах? (т. е.... служба по умолчанию не обслуживает все службы приложений)


person Adam McGurk    schedule 26.07.2019    source источник


Ответы (2)


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

TLDR; ответ ниже (dispatch.yaml):

dispatch:

  - url: "app.example.com/*"
    service: app

  - url: "auth.example.com/*"
    service: auth

Буквально просто добавляя * в конце каждого пути... давайте углубимся в это и поговорим об этом.

ПЕРВЫЙ помните, что моя служба по умолчанию была тем, что теперь стало службой "авторизации". Это будет важно в ближайшее время.

Я думаю, все понимают, что здесь происходит... * после имени домена означает, что оно должно совпадать с любым URL-адресом, указывающим на этот домен. Что происходило без *, так это то, что единственным путем, обслуживаемым службой, был мой корневой путь (или /). Все остальное обрабатывалось службой по умолчанию... что подводит нас к тому, почему я видел статические ресурсы из службы по умолчанию в моей службе приложений.

Когда App Engine сталкивался с URL-адресом, который специально не обрабатывался файлом dispatch.yaml (т. е. чем угодно, кроме корней для app.example.com и auth.example.com), он «по умолчанию» использовал службу по умолчанию, которая, если вы помните, был мой сервис авторизации. Вот почему моя служба аутентификации работала отлично, в то время как у моей службы приложений были проблемы.

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

person Adam McGurk    schedule 26.07.2019

Имейте в виду, что вам по-прежнему нужна служба по умолчанию в вашем проекте, см. app-engine?noredirect=1&lq=1">Какую цель выполняет служба по умолчанию в механизме приложений Google.

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

Ответ Адама также относится к службе auth (вам нужны подстановочные знаки). Из синтаксиса:

Совет: Вы можете включать в элемент url шаблоны подстановочных знаков, такие как подстановочный знак *; однако эти шаблоны можно использовать только перед именем хоста и в конце пути URL.

Шаблон URL-адреса, который может включать имя хоста и путь URL-адреса. Символы Glob могут использоваться для сопоставления с шаблонами. Символы Glob могут быть указаны только в начале шаблона и в конце шаблона.

Возможно, служба auth работает нормально, потому что на самом деле она обслуживается текущей службой по умолчанию (т. е. ее старым воплощением). Вы можете проверить, какие версии и службы активны, на странице консоли разработчика Версии.

person Dan Cornilescu    schedule 26.07.2019
comment
Да, я только сейчас заметил, что вы ответили на свой вопрос :) - person Dan Cornilescu; 27.07.2019