sinatra 基本用法
sinatra 不同于rails,是一个轻量级的ruby 框架,非常轻巧灵活。
基本用法如官网所述:
#!/usr/bin/envrubyrequire'sinatra'get'/frank-says'do'Putthisinyourpipe&smokeit!'end
默认会监听在127.0.0.1:4567 ,可以稍加配置,如下:
#!/usr/bin/envrubyrequire'sinatra'configuredoset:bind,'0.0.0.0'set:port,'1234'endget'/frank-says'do'Putthisinyourpipe&smokeit!'end
处理404 和 50x
#!/usr/bin/envrubyrequire'sinatra'configuredoset:bind,'0.0.0.0'set:port,'1234'endget'/frank-says'do'Putthisinyourpipe&smokeit!'endnot_founddostatus404"pagenotfound"enderrordo'Sorrytherewasaerror-'+env['sinatra.error'].messageendend
变量分为自定义变量和内置变量,使用变量的办法如下
#!/usr/bin/envrubyrequire'sinatra'configuredoset:bind,'0.0.0.0'set:port,'1234'endget'/frank'doname="Frank""hello#{name}"endget'/frank-says'do"youripaddressis#{request.ip}"end
其他一些有用的内置变量如下:
request.body#被客户端设定的请求体(见下)request.scheme#"http"request.script_name#"/example"request.path_info#"/foo"request.port#80request.request_method#"GET"request.query_string#""request.content_length#request.body的长度request.media_type#request.body的媒体类型request.host#"example.com"request.get?#true(其他动词也具有类似方法)request.form_data?#falserequest["SOME_HEADER"]#SOME_HEADERheader的值request.referrer#客户端的referrer或者'/'request.user_agent#useragent(被:agent条件使用)request.cookies#浏览器cookies哈希request.xhr?#这是否是ajax请求?request.url#"http://example.com/example/foo"request.path#"/example/foo"request.ip#客户端IP地址request.secure?#false(如果是ssl则为true)request.forwarded?#true(如果是运行在反向代理之后)request.env#Rack中使用的未处理的env哈希
为了避免root运行的安全问题,可以切换一下身份(apache,uid 48)
#!/usr/bin/envrubyrequire'sinatra'Process::UID.change_privilege(48)ifProcess.uid==0configuredoset:bind,'0.0.0.0'set:port,'1234'endget'/frank-says'do"youripaddressis#{request.ip}"end
采用ruby xxx.rb 的方式启动sinatra程序,缺点是必须在前台运行。
如果需要在后台运行,可以采用supervisor,创建配置文件/etc/supervisor/conf.d/sinatra.conf,内容如下,仅供参考:
[program:sinatra]command=/usr/bin/rubysinatra.rbprocess_name=%(program_name)snumprocs=1directory=/data/rubyumask=022priority=999autostart=trueuser=apacheredirect_stderr=truestdout_logfile=/var/log/sinatra/access.logstderr_logfile=/var/log/sinatra/error.log
附
CentOS7 安装ruby + sinatra 环境
yuminstallrubyruby-develrubygemsrubygem-rackgeminstallsinatrathin
ubuntu 16.04 安装ruby + sinatra 环境
apt-getinstallruby-sinatraruby-sinatra-contribthin
ps:官方推荐安装thin,因为它比默认的webrick性能更好,sinatra默认优先使用thin
update 2017-03-20
jruby效率高于ruby,如果使用jruby,由于thin是c扩展,jruby不支持,可以考虑在jruby中使用puma
,代码如下:
#!/usr/bin/envrubyrequire'sinatra'require'puma'#switchtoapacheuserifrunasrootProcess::UID.change_privilege(48)ifProcess.uid==0configuredoset:bind,'0.0.0.0'set:port,'4566'set:logging,'log/sinatra.log'set:server,:pumaendget'/'do"youripaddressis#{request.ip}"end
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。