所以,我有一个sinatra应用程序,我正在研究为客户托管几个不同的微型网站的应用程序。我将public和views目录结构化的方式是这样的:
sites/
site1/
public/
style.css
views/
layout.haml
general.haml
site2/
public/
style.css
views/
layout.haml
general.haml
现在,当请求进来时,我有以下两行:
set :views, Proc.new { File.join(root, "sites/#{site}/views") }
set :public, Proc.new { File.join(root, "sites/#{site}/public") }
当传入的请求进入,并且站点被定义为“site1”时,视图将完全按照所需的方式工作,并从适当的文件夹中呈现。但是,对“/style.css”路由的调用会返回404错误。
当我在app根目录中创建公共目录并将style.css放在那里时,它可以正常工作。但是,我需要这个工作在逐个站点的基础上。我要离开官方文档by Sinatra,但即使我设置
,它仍然无法正常工作enable :static
或者如果我使用
set :static, true
如文档中所述。有什么想法吗?
答案 0 :(得分:0)
我想这与您设置site
的方式有关。我相信如果我理解你的要求,你会想要在你的应用程序中使用site
方法而不是静态设置。这个例子就是这样做的,并按照我的预期工作:
class Test < Sinatra::Base
set :public, Proc.new { File.join(site, "public") }
set :static, true
register do
def site
["x", "y", "z"][rand * 3]
end
end
get "/" do
settings.public
end
end
但是,我不确定Sinatra的设计是否以这种方式提供静态文件,无论如何可能有更好的解决方案。例如,您可以完全在Nginx或Apache中完成此操作,而无需让Sinatra提供静态文件。