首页 > 解决方案 > Google App Engine 找不到 django 项目的静态文件,以及我的网站所依赖的 .txt 文件

问题描述

所以我在 Django 上创建了一个网站,并希望将其部署到 Google App Engine,网站本身已部署但没有所有静态文件。

此外,我的网站依赖于运行的 .txt 文件中有一个数据集(这是一个机器学习项目。),但它无法找到它,浏览器只是抛出一个找不到文件的错误。

如果有人可以帮助我,那就太酷了。

这是 app.yaml 文件。

runtime: python37
entrypoint: gunicorn -b :$PORT predictweb.wsgi
handlers:
- url: /static
  static_dir: static/
- url: /.*
  script: auto

标签: pythondjangogoogle-app-engine

解决方案


至少在第一代标准环境(python 2.7)中,静态文件/目录默认与应用程序代码分离,必须添加application_readable: true一个副本以及应用程序代码。请参阅@lusitanica 评论中链接的帖子中的详细信息。

handlers但这在第二代文档中没有明确说明。分离有点暗示:

给定目录中的所有文件都作为静态文件上传,并且它们都不能作为脚本运行。

但是没有提到application_readable。尽管如此,我认为值得一试,其他配置暂时没有记录,但它们正在工作,请参阅这篇文章的评论。

另一个想法,假设您可能遵循了一些通用的 django 指南,该指南通常显示如何通过 django提供静态内容- 即通过应用程序,而不是通过类似 CDN 的 GAE 方法(如果在 中配置,这就是它的服务方式app.yaml)。

有可能使它通过app.yaml. 至少我在Running Django on App Engine Standard Environment中看到了。也许检查你的settings.py,我在文档中的 github 版本引用中看到:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/

STATIC_ROOT = 'static'
STATIC_URL = '/static/'

但我不是 django 用户,无法提供更多细节。

如果以上都不起作用,您也可以将static_dir配置从 django 中取出app.yaml并让 django 提供静态内容。不是最优的,我知道 - 使用应用程序 CPU 周期。

至于.txt文件,

Exception Value: /srv/pages\songdatabase1.txt not found 

显示了几个问题:

  • 您正在将 windows 路径分隔符\与 *nix one混合/。您需要在 GAE 上使用 *nix,但最好只使用os.path.join()而不是手动操作路径
  • 您使用的是完整路径 - 您应该使用相对于应用程序顶部目录(app.yaml文件所在的位置)的路径。在你的情况下,它应该是pages/songdatabase1.txt

推荐阅读