2013-06-20 42 views
1

我想這個西納特拉教程(2008年)沿着沿:
http://devver.wordpress.com/2008/11/25/building-a-iphone-web-app-in-under-50-lines-with-sinatra-and-iui/錯誤列出目錄中的文件與西納特拉

但遇到了一些問題的代碼,對我來說這些文件未列出目前在主標題下。當我將dir更改爲"./public/files/"時,會顯示列表,但單擊文件的鏈接會導致出現錯誤頁面(「Sinatra不知道這個小圖標」)。如果我從URL中刪除public,它將在這種情況下工作。我該如何解決這兩個問題?

此外,如果使用「use_in_file_template!」這一行,我只是註釋掉了一個錯誤。 而我對CSS並不熟悉,所以有人可以告訴我在哪裏可以看到文本的顏色?


require 'rubygems' 
require 'sinatra' 
require 'pathname' 

get "/" do 
    dir = "./files/" 
    @links = Dir[dir+"*"].map { |file| 
    file_link(file) 
    }.join 
    erb :index 
end 

helpers do 

    def file_link(file) 
    filename = Pathname.new(file).basename 
    "<li><a href='#{file}' target='_self'>#{filename}</a></li>" 
    end 

end 

use_in_file_templates! 

__END__ 

@@ index 
<html> 
    <head> 
    <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/> 
    <style type="text/css" media="screen">@import "/stylesheets/iui.css";</style> 
    <script type="application/x-javascript" src="/javascripts/iui.js"></script> 
    </head> 

    <body> 
    <div class="toolbar"> 
    <h1 id="pageTitle"></h1> 
    </div> 
    <ul id="home" title="Your files, sir." selected="true"> 
     <%= @links %> 
    </ul> 
    </body> 

</html> 

回答

2

好,西納特拉(許多其他Web服務器)假設public是靜態文件的根目錄,它只是在訪問它的文件/顯示目錄時不使用它。所以,你的情況,你可以改變(增加public到路徑的文件時,獲取列表,並生成鏈接到他們時,刪除它)在您的一些代碼行:

get "/" do 
    dir = "public/files/" 
    @links = Dir[dir+"*"].map { |file| 
    file_link(file) 
    }.join 
    erb :index 
end 

helpers do 
    def file_link(file) 
    filename = Pathname.new(file).basename 
    "<li><a href='#{file.sub('public','')}' target='_self'>#{filename}</a></li>" 
    end 
end 
+0

這很有趣我想有之間更加協調一致二,謝謝你的回答! – user1297102