Sinatra 是一个用 ruby 实现的轻量级 web 框架,架构简单,可用于快速实现小规模的程序开发。
常见问题
一、如何让 Sinatra 程序在修改后自动加载
将
替换成,实践证明: rerun app.rb 即可
如果使用 rake ,则如下
If you still want in-process reloading, check out .
二、如何使用sessions
sessions 缺省是禁用,需要手工启用:
-
enable :sessions
-
-
get '/foo' do
-
session[:message] = 'Hello World!'
-
redirect to('/bar')
-
end
-
-
get '/bar' do
-
session[:message] # => 'Hello World!'
-
end
如果你需要为 sessions 设置附加参数,如时间超期,可以使用 。
-
use Rack::Session::Cookie, :key => 'rack.session',
-
:domain => 'foo.com',
-
:path => '/',
-
:expire_after => 2592000, # In seconds
-
:secret => 'change_me'
三、如何获取当前页面的 route
使用 request 对象可以获取相关信息
-
get '/hello-world' do
-
request.path_info # => '/hello-world'
-
request.fullpath # => '/hello-world?foo=bar'
-
request.url # => ''
-
end
查看 了解 requrest 对象的更多方法。
四、在 view 中如何使用自定义的 helper
hello.rb
-
helpers do
-
def em(text)
-
"#{text}"
-
end
-
end
-
-
get '/hello' do
-
@subject = 'World'
-
haml :hello
-
end
views/hello.haml
:
-
%p= "Hello " + em(@subject)
五、如何通过多个 url 触发同一个 route/handler
如下:
-
["/foo", "/bar", "/baz"].each do |path|
-
get path do
-
"You've reached me at #{request.path_info}"
-
end
-
end
六、如何将 url 最后一个斜线作为可选项
-
get '/foo/bar/?' do
-
"Hello World"
-
end
这条路由规则将匹配: "/foo/bar"
和 "/foo/bar/"
。感觉跟正则匹配很像哦。
七、如何渲染子目录下的 template
sinatra 不建议你创建复杂的 view 结构,如果你实在要用,可以如下:
-
get '/' do
-
haml :'foo/bar'
-
end
同以下形式等价
-
get '/' do
-
haml 'foo/bar'.to_sym
-
end
八、我使用 Thin 服务器,希望能够看到报错信息
添加 --debug 参数
-
thin --debug --rackup config.ru start
九、如何通过 Sinatra 发送邮件
可以试试 (sudo gem install pony):
-
require 'pony'
-
post '/signup' do
-
Pony.mail :to => 'you@example.com',
-
:from => 'me@example.com',
-
:subject => 'Howdy, Partna!'
-
end
You can even use templates to render the body. In email.erb:
-
Good day <%= params[:name] %>,
-
-
Thanks for signing my guestbook. You're a doll.
-
-
Frank
And in mailerapp.rb:
-
post '/guestbook/sign' do
-
Pony.mail :to => params[:email],
-
:from => "me@example.com",
-
:subject => "Thanks for signing my guestbook, #{params[:name]}!",
-
:body => erb(:email)
-
end
阅读(1486) | 评论(0) | 转发(0) |