Sinatra部署Kubernetes:迁移至子目录后生产环境资源404,本地正常
Sinatra应用部署到Kubernetes子路径后静态资源404问题
我的代码仓库:nullset2/smbdxfortunes
环境配置
- Sinatra应用
- Ruby 2.7
- Kubernetes 1.17
- Traefik Ingress作为反向代理
问题场景
原本我的应用在nullset2.zapto.org根路径运行正常,现在希望迁移至nullset2.zapto.org/smbdxfortunes子路径下。
应用遵循Sinatra约定,静态资源和资源文件放在./public子目录,从该目录读取着陆页,同时监听其他路由请求,执行查询后返回erb文件。
已配置Ingress根据路由分发请求到对应应用,并重写应用代码使其监听/smbdxfortunes路由。本地运行时能正常渲染public/index.html及所有资源,但容器化部署到Kubernetes集群后,页面能显示,但public/index.html中引用的所有静态文件返回HTTP 404,导致图片和样式失效。
已尝试的无效方法
- 在
fortune.rb的Sinatra模块中设置set :base_path, '/smbdxfortunes' - 在
fortune.rb中设置set :static, true - 修改
index.html中的资源路径以适配子目录,例如将img/vine.png改为/smbdxfortunes/img/vine.png - 配置
config.ru如下,并修改Dockerfile的CMD语句使用rackup运行:
require './fortune' use Rack::Static, :urls => ['/css', '/js', '/img', '/wav'], :root => 'public' run Sinatra::Application
恳请各位提供帮助。
内容的提问来源于stack exchange,提问作者Alfredo Gallegos
相关产品推荐
相关产品推荐

