首先是安装Ruby和DevKit
windows下可下载对应安装包安装 <a href=”http://rubyinstaller.org/downloads/”>http://rubyinstaller.org/downloads/</a>
linux下(Debian/Ubuntu) 直接apt-get install ruby ruby-dev
然后安装相关gem包</h3>
gem install sinatra
新建test.rb内容
require 'sinatra'
get '/' do
"Hello, World!"
end
运行服务器</h3>
$ ruby app.rb
在浏览器中输入:localhost:4567,没问题的话就会显示Hello, World!
这段简单的Hello world程序包含了Sinatra程序的三个基本组成部分:
路由(route):
'/' 就是路由。路由可以是单一的路径,或者带有参数的路径(比如 /:name),甚至是正则表达式。对于Sinatra不知道的路由,Sinatra会返回404错误(作为App运行的时候),或者传递给下面的中间件(作为中间件运行的时候)。
方法(method):
get是方法。在Sinatra中,HTTP的四个方法GET/POST/PUT/DELETE都有相应的方法get/post/put/delete。
处理器(handler):
处理器就是最后的代码块,处理器的返回值就是Sinatra返回给客户端(主要是浏览器)的内容。返回值主要以字符串为主,也可以是包含状态码,消息头,消息体的数组。
添加主页模板
$ gem install haml #安装haml
require 'haml'
get '/' do
haml :index
end
在这里<code>haml :index</code>,就表示使用Haml渲染'views/index.haml'
这个模版。
index.haml的样式:
%html
%head
%title API
%body
%h1 Hello Api
%p Powered by Ruby on Sinatra
添加所需的API接口
get '/promoteapp' do
content_type :json
'api'
end
建立相关类,获取数据库数据</h3>
gem install mysql2
gem install json
#encoding : UTF-8
require 'mysql2'
require 'json'
class Model
def initialize (code,msg,data)
@code = code
@msg = msg
@data = data
end
def to_json
return Hash[:code => @code, :msg => @msg, :data => @data].to_json
end
end
client = Mysql2::Client.new(:host => "localhost", :username => "test",:password=>"test",:database=>"api_service")
results = client.query("select appid,title,content,logo from promote_app where _status=10");
apps = Array.new
results.each do |row|
appid = row["appid"]
title = row["title"]
content = row["content"]
logo = row["logo"]
apps.push(Hash[:appid => appid, :title => title, :content => content, :logo => logo])
end
client.close if client
m = Model.new(0,'success',apps)
puts m.to_json
mysql驱动中文乱码问题严重,于是采用mysql2驱动
使用“重载”解决“每次重启的麻烦”</h3>
$ gem install sinatra-contrib
然后,在“require ‘sinatra/base’”的正后方加入:
require
'sinatra/reloader'
最后,只需要通过register来声明使用重载(用Thin作服务器不能很好地运行,所以一并设定在WEBrick上)
class App < Sinatra::Base
enable :inline_templates
enable :logging
set :server, "webrick"
register Sinatra::Reloader
#...
end
想设定为只在development环境中有效也很简单
configure :development do
register Sinatra::Reloader
set :server, "webrick"
end
这样,就能在运行着Sinatra进程的终端,进行设计变更、逻辑变更等各种修改(追加gem等的情况是需要重启的,这个请注意)
$ ruby app.rb在浏览器中输入:localhost:4567,没问题的话就会显示Hello, World! 这段简单的Hello world程序包含了Sinatra程序的三个基本组成部分:
路由(route):
'/' 就是路由。路由可以是单一的路径,或者带有参数的路径(比如 /:name),甚至是正则表达式。对于Sinatra不知道的路由,Sinatra会返回404错误(作为App运行的时候),或者传递给下面的中间件(作为中间件运行的时候)。方法(method):
get是方法。在Sinatra中,HTTP的四个方法GET/POST/PUT/DELETE都有相应的方法get/post/put/delete。处理器(handler):
处理器就是最后的代码块,处理器的返回值就是Sinatra返回给客户端(主要是浏览器)的内容。返回值主要以字符串为主,也可以是包含状态码,消息头,消息体的数组。添加主页模板
$ gem install haml #安装haml
require 'haml' get '/' do haml :index end在这里<code>haml :index</code>,就表示使用Haml渲染
'views/index.haml'
这个模版。
index.haml的样式:
%html %head %title API %body %h1 Hello Api %p Powered by Ruby on Sinatra
添加所需的API接口
get '/promoteapp' do content_type :json 'api' end
建立相关类,获取数据库数据</h3>
gem install mysql2
gem install json
#encoding : UTF-8
require 'mysql2'
require 'json'
class Model
def initialize (code,msg,data)
@code = code
@msg = msg
@data = data
end
def to_json
return Hash[:code => @code, :msg => @msg, :data => @data].to_json
end
end
client = Mysql2::Client.new(:host => "localhost", :username => "test",:password=>"test",:database=>"api_service")
results = client.query("select appid,title,content,logo from promote_app where _status=10");
apps = Array.new
results.each do |row|
appid = row["appid"]
title = row["title"]
content = row["content"]
logo = row["logo"]
apps.push(Hash[:appid => appid, :title => title, :content => content, :logo => logo])
end
client.close if client
m = Model.new(0,'success',apps)
puts m.to_json
mysql驱动中文乱码问题严重,于是采用mysql2驱动
使用“重载”解决“每次重启的麻烦”</h3>
$ gem install sinatra-contrib
然后,在“require ‘sinatra/base’”的正后方加入:
require
'sinatra/reloader'
最后,只需要通过register来声明使用重载(用Thin作服务器不能很好地运行,所以一并设定在WEBrick上)
class App < Sinatra::Base
enable :inline_templates
enable :logging
set :server, "webrick"
register Sinatra::Reloader
#...
end
想设定为只在development环境中有效也很简单
configure :development do
register Sinatra::Reloader
set :server, "webrick"
end
这样,就能在运行着Sinatra进程的终端,进行设计变更、逻辑变更等各种修改(追加gem等的情况是需要重启的,这个请注意)
$ gem install sinatra-contrib然后,在“require ‘sinatra/base’”的正后方加入:
require
'sinatra/reloader'
最后,只需要通过register来声明使用重载(用Thin作服务器不能很好地运行,所以一并设定在WEBrick上)
class App < Sinatra::Base enable :inline_templates enable :logging set :server, "webrick" register Sinatra::Reloader #... end想设定为只在development环境中有效也很简单
configure :development do register Sinatra::Reloader set :server, "webrick" end这样,就能在运行着Sinatra进程的终端,进行设计变更、逻辑变更等各种修改(追加gem等的情况是需要重启的,这个请注意)