Что делает загрузка в приложении Google AppEngine app.yaml?
Я иногда просматриваю различные обучающие программы Google AppEngine, и я только что заметил что-то странное в вопросе StackOverflow о favicon.ico - в частности, этот вопрос: favicon.ico" не найден ошибка " в приложении.
- url:/favicon.ico
static_files: media/img/favicon.ico
Загрузка: media/img/favicon.ico
- url:/robots.txt
static_files: media/robots.txt
Загрузка: media/robots.txt
Все плакаты включали строку "upload:" в их определениях app.yaml. Приложение, похоже, работает так же или без линии загрузки: и я не видел упоминания об этом в официальной документации.
Где он используется или какая разница, если эта строка включена или нет?
Ответы
Ответ 1
Это описано здесь: https://developers.google.com/appengine/docs/python/config/appconfig#Static_File_Pattern_Handlers. Это, в основном, регулярное выражение, которое идентифицирует файлы, обработанные преобразователем. Это необходимо для статических обработчиков файлов.
Ответ 2
Я читал docs снова и снова в надежде понять это лучше. Это то, что я вывел из него.
App Engine говорит, что он загружает наши статические файлы и код приложения в разные места. Чтобы сделать это, он должен знать, какие файлы являются статическими - это указано через параметр upload.
Однако возникает ряд вопросов, касающихся дизайна параметров, указанных в app.yaml.
-
Может ли App Engine определить, какие файлы статичны только из параметра static_files?
В вашем примере значение параметра static_files было идентично значению параметра загрузки (т.е. Media/img/favicon.ico). Однако, как правило, значение параметра static_files отличается от значения параметра upload. Параметр static_files позволяет разрешить сопоставлять группы из шаблона url, чтобы сгенерировать путь к файлу, например,
- url: /item-(.*?)/category-(.*)
static_files: archives/\2/items/\1
upload: archives/(.*?)/items/(.*)
-
Может ли App Engine определить, какие файлы являются статическими только из параметра url?
В общем случае нет, поскольку иерархия ресурсов, подразумеваемая URL-адресом, может не совпадать с фактической структурой папок. Например, я мог бы поместить мой index.html в подпапку, но я мог бы получить к нему доступ с корневым URL-адресом "hello.appspot.com/", а не "hello.appspot.com/subfolder/".
-
Может ли App Engine определить, какие файлы являются статическими, используя как параметр url, так и параметр static_files?
Кажется целесообразным написать функцию, которая возвращает шаблон загрузки, заданный как параметром url, так и параметром static_files, тем самым отрицая необходимость явного параметра загрузки. Я думаю, что это работает для простых случаев, однако, вероятно, есть причина, по которой я не знаю, что документы записывают "обработчик не может определить, какие файлы в вашем каталоге приложений соответствуют заданным шаблонам url и static_files".
url: шаблон URL, как регулярное выражение. Выражение может содержать группировки, на которые можно ссылаться в пути к файлу script с обратными ссылками регулярного выражения. Например, /item - (.?)/Category- (.) Будет соответствовать URL/item-127/category-fruit и использовать 127 и фрукты в качестве первой и второй групп.
погрузчики:
- url: /item-(.*?)/category-(.*)
static_files: archives/\2/items/\1
static_files: Путь к статическим файлам, сопоставляемым шаблоном URL, из корневого каталога приложения. Путь может ссылаться на текст, сопоставленный в группировках в шаблоне URL. Как и в предыдущем примере, archives/\2/items/\1
вставляет вторую и первую группы, соответствующие вместо \2
и \1
соответственно. С образцом в приведенном выше примере путь к файлу будет archives/fruit/items/127
.
загрузки: Регулярное выражение, которое соответствует путям файлов для всех файлов, на которые будет ссылаться этот обработчик. Это необходимо, потому что обработчик не может определить, какие файлы в вашем каталоге приложений соответствуют заданным шаблонам url и static_files. Статические файлы загружаются и обрабатываются отдельно от файлов приложений. В приведенном выше примере может использоваться следующий шаблон загрузки: archives/(.*?)/items/(.*)
В дополнение, альтернативой использованию static_files является использование static_dir, если весь каталог может быть помечен как статический. В этом случае параметр upload не нужен, так как static_dir должен указывать на фактический каталог, и, таким образом, App Engine просто загрузит всю директорию туда, где она хранит статические файлы. Однако обратите внимание, что использование параметра url в этом случае будет иным.
URL: Префикс URL. Это значение использует синтаксис регулярных выражений (и поэтому специальные символы регулярного выражения должны быть экранированы), но он не должен содержать группировки. Все URL-адреса, начинающиеся с этого префикса, обрабатываются этим обработчиком, используя часть URL-адреса после префикса как часть пути к файлу.
static_dir: Путь к каталогу, содержащему статические файлы, из корневого каталога приложения. Все после окончания сопоставленного шаблона url добавляется к static_dir, чтобы сформировать полный путь к запрашиваемому файлу. Все файлы в этом каталоге загружаются приложением как статические файлы.