2011-04-30 55 views
2

假设我有类似的目录结构:在美丽的路线中为Sinatra提供静态文件?

path_to_file/one/index.html 

如何设置我的西纳特拉的应用程序将被路由到

mysite.com/path_to_file/one/ 

,并有前面提到的文件来呈现? path_to_file将始终保持不变,但其中会有不同的文件夹(two,three等)。

我已经试过如下:

get '/path_to_file/:number' do 
    File.read(File.join('path_to_file', "#{params[:number]}", "index.html")) 
end 

但随后例如从index.html链接的JavaScript文件无法正确呈现。

+0

你的Sinatra控制器是什么样的? – 2011-04-30 07:41:13

+1

不确定你的意思是不是我的Sinatra控制器上面的代码? – ph0rque 2011-05-01 01:00:22

回答

2

Got it!

get '/path_to_file/:number/:file' do 
    File.read(File.join('path_to_file', "#{params[:number]}", "#{params[:file]}")) 
end 

get '/path_to_file/:number' do 
    File.read(File.join('path_to_file', "#{params[:number]}", "index.html")) 
end 

顺序很重要,因为如果这两种方法是相反的,get '/path_to_file/:number'成为get '/path_to_file/:number/:file'一个超集。

+0

这就是我之前评论中的想法......很高兴你明白了!我在Sinatra也这样做过。 – 2011-05-03 01:59:27

0

只是一个想法,但你可以设置你的服务器软件,Apachenginx,不管它是你正在使用,从不同的地点为.css.js和图像文件。

+0

好吧,它托管在Heroku上,所以我无法访问服务器软件。此外,为了清晰起见,我想将自定义的'.css'和'.js'文件保存在查看我的代码的其他人的相同文件夹中。 – ph0rque 2011-05-01 01:02:18