Google App Engine:如何使用相同的父目录创建静态和动态文件?例如dir / css&dir / python?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Google App Engine:如何使用相同的父目录创建静态和动态文件?例如dir / css&dir / python?相关的知识,希望对你有一定的参考价值。

因此,对于一个项目,我需要将代码分组到3个父文件夹 - SourceA,SourceB和SourceC,具体取决于代码是我自己的,部分是我自己的,还是其他人的代码。这三个文件夹也有一个python,javascript和misc(包含HTML和其他任何东西)。例如,结构可以用图形表示如下:

--SourceA

- - 蟒蛇

---- JavaScript的

----杂项

--SourceB

- - 蟒蛇

---- JavaScript的

----杂项

--source

- - 蟒蛇

---- JavaScript的

----杂项

同样,我的app.yaml文件可以在下面看到。在本地运行,这非常有效,相应地显示静态和动态文件,但是,当部署在Google App Engine上时,只会抛出TemplateNotFound错误,可能是因为app引擎将父目录(例如SourceA)视为静态路径:

runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /SourceA/misc
  static_dir: SourceA/misc
- url: /SourceB/misc
  static_dir: SourceB/misc
- url: /SourceC/misc
  static_dir: SourceC/misc
- url: /SourceA/javascript
  static_dir: SourceA/javascript
- url: /SourceB/javascript
  static_dir: SourceB/javascript
- url: /SourceC/javascript
  static_dir: SourceC/javascript
- url: /.*
  script: SourceA.python.main.app

如果我运行它,我得到Flask中的render_template()函数抛出的TemplateNotFound错误(在幕后使用Jinja),当我尝试使用Jinja中的.render()函数时。如果我删除所有的静态处理程序只是为了测试原理,python代码再次按预期工作...但当然静态文件不提供...即。通过将我的app.yaml更改为

runtime: python27
api_version: 1
threadsafe: true
handlers:
- url: /.*
  script: SourceA.python.main.app

虽然我可以通过简单地在SourceA / B / C目录之外创建一个静态目录来绕过这个并在appspot上有一个完全工作的站点,但这并不理想,因为它不遵守我认为的规范跟随

无论如何,希望我已经解释了这个问题,如果有人知道这是否可行,那么我将不胜感激任何帮助!

谢谢

答案

如果您的应用程序在开发服务器上正常运行,则意味着问题只是声明为static的目录中的文件存在,默认情况下该应用程序无法访问。将application_readable标志添加到静态目录的处理程序配置将解决该问题,请参阅handlers表中的相应行。

但总的来说,将应用程序代码与静态项混合并不是一个好主意。

以上是关于Google App Engine:如何使用相同的父目录创建静态和动态文件?例如dir / css&dir / python?的主要内容,如果未能解决你的问题,请参考以下文章

将Google App Engine与Javascript客户端连接

Google App Engine(GAE) - 每分钟为每个用户同时执行相同的任务

如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?

在 Google App Engine 上验证/更改应用程序区域

在单个 Google App Engine 项目中同时使用 Java 和 Python

如何在 Google App Engine 标准环境中使用 Google Cloud Build 或其他方法设置环境变量?