您可以通过将静态文件放在public/
(默认情况下)中来提供静态文件 - 目前我有一个index.html
,但是如何将根点指向该文件而不必将其解析为模板?
要清楚,我可以成功访问/index.html
,并且我想将/
路由为相同的静态文件,但不重定向。知道怎么做吗?
答案 0 :(得分:20)
最终可能会有一个更好的答案,直到那时这才是我的目标。
如果这不是您想要的:
get '/' do
redirect '/index.html'
end
您可能会这样做:
get '/' do
File.new('public/index.html').readlines
end
我会选择第一个,但不确定为什么要避免重定向
答案 1 :(得分:6)
只需在app类中设置enable :static
即可。像这样:
class App < Sinatra::Base
# Set the app root; this is where the 'public' and 'views'
# directories are found (by default).
set :root, File.expand_path("#{File.dirname(__FILE__)}/../app")
# Allow the app to serve static files from the 'public' directory in :root
enable :static
end
答案 2 :(得分:3)
使用passenger这似乎开箱即用。在公共目录中有一个index.html文件,并且在访问根URL时没有路由引出index.html。
答案 3 :(得分:3)
我认为这只是一个问题,因为如果你只是去/
,Sinatra / Rack没有默认文件的概念。在像Apache或Nginx这样的网络服务器中,这将由你负责,并且通常默认为index.html index.htm
(如果存在,它将在到达目录中没有实际文件名的目录时得到服务。)
当每个人都说这是内置于Passenger时,我认为它们的确意味着它内置于Apache / Nginx中。 Apache / Nginx将检查静态文件是否存在并提供服务(如果存在),请求将永远不会到达Rack,这对于性能来说非常棒。
我不想设置重定向到404页面,因为这违反了HTTP的整个想法:对于端点应该返回该端点的真实状态的所有内容,应该有一个端点。这意味着如果你转到/asdf
,你希望网络服务器报告404,因为这是实际发生的事情。如果你进行重定向,现在你的网站说“我以前在这里有东西,但它移动了”然后它重定向你的页面,即使它在页面上的文本中显示404,实际上是由网络报告的服务器为200,意思是“这个页面的一切都很好!”
答案 4 :(得分:2)
有一个宝石&#34; sinatra-index&#34;解决这个问题。