Что делает загрузка в приложении 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. Приложение, похоже, работает так же или без линии загрузки: и я не видел упоминания об этом в официальной документации.

Где он используется или какая разница, если эта строка включена или нет?

Ответ 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, чтобы сформировать полный путь к запрашиваемому файлу. Все файлы в этом каталоге загружаются приложением как статические файлы.