示例代码讲解
应用1项目所在地址https://github.com/first20hours/monograph
我们启动应用1,我们把目录定位到/samples/monograph,执行下面的命令:
~/samples/monograph$ ruby application.rb
点击 访问测试 按钮,即可看到页面效果。
现在我们主要讲解应用1monograph下的application.rb文件:
require 'rubygems'
require 'sinatra'
require 'rack-canonical-host'
set :public, Proc.new { File.join(root, "_site") }
# use Rack::CanonicalHost, 'domain.com'
# Added headers for Varnish
before do
response.headers['Cache-Control'] = 'public, max-age=31556926' # 1 year
end
require 是请求应用中需要的框架文件,set:public 设置项目文件的根目录_site,要使用HTTP缓存,必须正确地设定消息头response.headers['Cache-Control'],核心提示: 在前置过滤器中设定缓存.
# Index handler
get '/?' do
File.read("_site/index.html")
end
# Feed handler
get '/feed/?' do
File.read("_site/rss.xml")
end
get '/robots.txt' do
File.read("_site/robots.txt")
end
## Post handler
get '/*/?' do
File.read("_site/#{params[:splat][0]}/index.html")
end
上面的代码,都是路由的处理程序,我们先请求'/?'路由匹配,如果请求路径成功,将使用ruby下File 类和read()方法,读取返回的页面。
特别提示:get '/*/?' 访问此路由下,我们使用路由范式也可以包含通配符参数, 可以通过params[:splat]接收参数,返回的是数组,所以我们需要在接收参数改成params[:splat][0],这样就可以改变参数。
## Error handler
not_found do
File.read("_site/error/index.html")
end
error do
File.read("_site/error/index.html")
end
错误处理在与路由和前置过滤器相同的上下文中运行,当一个 Sinatra::NotFound 错误被抛出的时候, 或者响应状态码是404,not_found 处理器会被调用,error 处理器,在任何路由代码块或者过滤器抛出异常的时候会被调用。 异常对象可以通过sinatra.error Rack 变量获得。