我有时会阅读各种Google AppEngine教程,我在StackOverflow问题中注意到有关favicon.ico的一些奇怪内容 - 特别是这个问题:favicon.ico "not found error" in app engine
- url:/favicon.ico
static_files:media / img / favicon.ico
上传: media / img / favicon.ico
- url:/robots.txt
static_files:media / robots.txt
上传: media / robots.txt
所有的海报都在他们的app.yaml定义中包含“upload:”行。无论是否有upload:line,应用程序似乎都一样,我还没有看到任何提及它在官方文档中。
它在哪里使用,或者如果包含这条线,它会有什么不同?
答案 0 :(得分:7)
我一遍又一遍地阅读docs,希望能更好地理解这一点。这是我从中推断的。
App Engine表示它将我们的静态文件和应用程序代码上传到不同的位置。为此,它必须知道哪些文件是静态的 - 这是通过upload参数指定的。
然而,这引发了一些关于app.yaml中指定的参数的设计的问题。
App Engine是否可以单独从static_files参数推断出哪些文件是静态的?
在您的示例中,static_files参数的值与upload参数的值相同(即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 /子文件夹/"
App Engine是否可以使用url参数和static_files参数推断出哪些文件是静态的?
在给定url参数和static_files参数的情况下编写返回上传模式的函数似乎是可行的,从而无需显式上载参数。我认为它适用于简单的情况,但是,我可能有一个理由不知道文档编写"处理程序无法确定应用程序目录中的哪些文件与给定的url和static_files模式相对应"。 / p>
url:URL模式,作为正则表达式。表达式可以包含可以在具有正则表达式反向引用的脚本的文件路径中引用的分组。例如,/ item - (。?)/ category - (。)将匹配URL / item-127 / category-fruit,并使用127和fruit作为第一个和第二个分组。 /> 处理:
- 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,如果整个目录可以标记为static。在这种情况下,不需要upload参数,因为static_dir应指向实际目录,因此App Engine只会将整个目录上传到存储静态文件的位置。但请注意,在这种情况下,url参数的使用会有所不同。
URL: 一个URL前缀。此值使用正则表达式语法(因此必须转义正则表达式特殊字符),但它不应包含分组。所有以此前缀开头的URL都由此处理程序处理,使用前缀后的URL部分作为文件路径的一部分。
static_dir: 从应用程序根目录到包含静态文件的目录的路径。匹配的url模式结束后的所有内容都附加到static_dir以形成所请求文件的完整路径。 此目录中的所有文件都随应用程序一起上载为静态文件。
答案 1 :(得分:2)
这里有记录:https://developers.google.com/appengine/docs/python/config/appconfig#Static_File_Pattern_Handlers。它基本上是一个正则表达式,用于标识映射器处理的文件。它是静态文件处理程序所必需的。