AWS EB Flask无法识别静态文件

6 投票
2 回答
2315 浏览
提问于 2025-04-17 22:27

我在AWS上用Elastic Beanstalk托管Flask应用时遇到了问题。我按照AWS的文档(看起来有点旧?)做了一些操作,还参考了这里的建议。这样做的时候,如果我的文件夹结构是这样的,就能正常工作:

--application.py
 /static
 /templates
 requirements.txt
 .ebextensions
 .elasticbeanstalk

但是,我想让我的应用结构更清晰一些,所以我调整了文件夹结构,结果就不工作了。

--application.py
--.ebxtensions
--.elasticbeanstalk
  /app
     - __init__.py
     - /static
     - /templates

我尝试过修改optionsettings.myapp-env中的设置,参考了这里的建议,但还是没能解决问题。

(附注:应用运行得很好,只是无法识别静态文件夹)

任何帮助都会很感激!

2 个回答

3

这个问题似乎是最近的一个版本,我想说说我的经历,因为我花了好几个小时才搞明白到底出了什么问题。我的配置设置都没问题,错误日志和请求日志也没有显示任何问题。最后我打开了开发者控制台,发现我所有的静态资源都出现了ERR_BLOCKED_BY_CLIENT的错误。原来Ghostery把Elastic Beanstalk当成了跨域分析跟踪器,所以这是一个需要记录下来的小坑。关掉这个功能对我来说很简单,但我只是为了好玩而运行一个网站。如果你真的想把一个产品部署到Elastic Beanstalk上,而Ghostery又屏蔽了你所有的静态资源,那可就麻烦了。你的客户可能会觉得你的网站很糟糕,却不会想到去查找原因。我想,最好是把所有资源打包在一起,或者使用CDN。

5

看起来你需要把路径映射改成:
"/static/": "app/static/"

这个映射是把你在HTML中提到的虚拟路径和实际的文件夹结构对应起来。因为你已经改了文件夹,所以现在也得改这个映射。

另外,你也可以在AWS Beanstalk的网页控制台里做同样的设置,不一定要在配置文件里改。

撰写回答