我的代码:https://github.com/nullset2/smbdxfortunes
嗨。我的设置如下:
- Sinatra应用程序
- Ruby 2.7
- Kubernetes 1.17
- Traefik Ingress作为“反向代理”
我最初让这个应用程序在我的服务器的根上运行良好:nullset2.zapto.org
(它通过DDNS解析到路由器的IP),现在我希望移动这个应用程序,以便从nullset2.zapto.org/smbdxfortunes
提供服务。
我的sinatra应用程序使用了一个约定,即资产和静态文件应该位于./public
子目录中,从那里它读取一个小的着陆页并监听另一个路由的请求,执行一个小的查询并返回一个erb文件。
我已经配置了Ingress,以便它根据路由解析正确的应用程序,并重写了应用程序代码,以便它侦听/smbdxfortunes
路由。由于某种原因,应用程序将在本地完美工作,并从public/index.html
中呈现所有资产的页面-但是当我将其容器化并将其部署在我的kubernetes集群上时,应用程序将工作,但public/index.html
中引用的所有静态文件将返回HTTP 400。网站本身将呈现,但所有破碎的图像和没有风格。
我试过但没有用的东西:
1.设置set :base_path, '/smbdxfortunes'
在我的财富。rb sinatra模块。
1.在我的财富中设置set :static, true
。卢布
1.修改从索引中读取资产的实际路径。html来说明子目录(e.g. img/vine.png变为/smbdxfortunes/img/vine。png)
1.像这样设置config.ru
,并将我的dockerfile中的CMD
语句更改为使用rackup:
require './fortune'
use Rack::Static, :urls => ['/css', '/js', '/img', '/wav'], :root => 'public'
run Sinatra::Application
任何帮助都很感激。
1条答案
按热度按时间hjzp0vay1#
这不是一个答案,而是一个解决方案:我设法解决了这个问题,方法是将我的/和/smbdxfortunes路由指向同一个服务,所以所有对静态资产的请求都转到sinatra public子目录,否则对根目录的请求返回404。