1

我正在尝试遵循这个 Sinatra 教程(从 2008 年开始):
http ://devver.wordpress.com/2008/11/25/building-a-iphone-web-app-in-under-50-lines-与-sinatra-and-iui/

但是遇到了一些代码问题,对我来说,这些文件目前没有列在主标题下。当我更改dir显示"./public/files/"列表时,但单击文件的链接会导致错误页面(“Sinatra 不知道这个小曲”)。如果我public从 URL 中删除它,它将在这种情况下起作用。我该如何解决这两个问题?

此外,如果使用“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>
4

1 回答 1

2

好吧,sinatra(与许多其他 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
于 2013-06-20T11:01:29.573 回答