我正在尝试遵循这个Sinatra教程(从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不知道这个小曲”)。如果我从网址中删除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>
答案 0 :(得分: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