Я развернул несколько приложений PHP в стандартной среде GAE, и все работает нормально.
Сейчас я развертываю новое приложение, которое на локальном сервере предоставляется gcloud
SDK работает как положено (команда терминала: dev_appserver.py --log_level=warning app.yaml
).
Проблема в том, что при развертывании его в службе GAE (gcloud app deploy app.yaml --project myapp
), Я получаю сообщение об ошибке 404:
The page could not be found
No web page found for the web address: xxx
HTTP ERROR 404
App.yaml выглядит так:
runtime: php55
api_version: 1
threadsafe: true
skip_files:
- README.md
- package.json
handlers:
- url: /(.*\.html)
script: mod_rewrite.php
secure: always
- url: /(.*\..{2,})
static_files: \1
upload: (.*\..{2,})
secure: always
- url: /.*
script: mod_rewrite.php
secure: always
Я также пытался добавить тестовый обработчик, указывающий на определенный файл:
- url: /(mytest\.html)
static_files: \1
upload: mytest.html
secure: always
Таким образом я смог достичь URL. Но это было так. Любой другой URL-адрес 404.
Интересно то, что на Versions
На вкладке приложения GAE в текущей развернутой версии указано, что приложение 0 B
, даже если нет предыдущих версий этого, в то время как он должен быть около 30 Мб. При развертывании все файлы 988, похоже, загружены, в том числе из-за моего медленного интернет-соединения, это занимает некоторое время.
Я попытался перенести все это в новый проект после успешного завершения урока, и я все еще сталкиваюсь с той же проблемой.
Вы можете использовать application_readable
опция обработчика для включения соответствующих статических файлов в код приложения. От Элемент обработчиков:
application_readable
Необязательный. Boolean. По умолчанию файлы объявлены в статических обработчиках файлов
загружаются как статические данные и предоставляются только конечным пользователям. Oни
не может быть прочитано приложением. Если для этого поля установлено значение true,
файлы также загружаются в виде данных кода, чтобы ваше приложение могло читать
их. Обе загрузки оплачиваются по вашему коду и статическим данным.
место хранения квоты на ресурсы.
Как это:
- url: /(.*\..{2,})
static_files: \1
upload: (.*\..{2,})
application_readable: true
secure: always
После нескольких часов тестирования я наконец понял, в чем проблема.
В GAE при объявлении определенного пути статическим он интерпретируется как путь без кода. Поэтому все файлы в этом пути не доступны для сценариев, работающих в среде PHP с require
или же include
и они не отображаются в развернутом отладчике кода.
По этой причине я поместил все статические файлы в подпапку (www
) и нестатические файлы required
сценариями PHP в другой подпапке.