2011-04-30 52 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