Я развернул несколько 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
handler для включения соответствующих статических файлов в код приложения. Из элемента Handlers :
application_readable
Необязательный. Boolean. По умолчанию файлы, объявленные в статических обработчиках файлов, загружаются как статические данные и служат только для конечных пользователей. Они не могут быть прочитаны приложением. Если для этого поля установлено значение true, файлы также будут загружены в виде данных кода, чтобы ваше приложение могло их прочитать. Обе загрузки загружаются с вашего кода и статических квот ресурсов хранилища данных.
Как это:
- url: /(.*\..{2,}) static_files: \1 upload: (.*\..{2,}) application_readable: true secure: always
После нескольких часов тестирования я наконец понял, в чем проблема.
В GAE при объявлении определенного статического пути он интерпретируется как некодовый путь. Таким образом, все файлы в этом пути недоступны скриптами, запущенными в среде PHP с require
или include
и они не отображаются в развернутом отладчике кода.
По этой причине я поместил все статические файлы в подпапку ( www
) и нестатические файлы, required
скриптами PHP под другой подпапкой.