我想测量每个Sinatra路由的执行时间,包括完整的请求/响应周期持续时间,然后将此指标发送到Graphite服务器。我的第一个方法是使用Rack::Runtime,然后从Sinatraafter过滤器的响应头中获取我需要的值,但我发现这个过滤器在响应完全发送到客户端之前实际执行。所以不仅我无法访问afterblock中的许多响应信息,我也无法使用此block以任何其他方式将指标发送到Graphite,因为它们不会反射(reflect)真实的响应时间.我在其他主题中读到,一种可能的方法是创建一个Rack中间件来包装应用程序并执行基准测试,我以这样的方式结束:classGraphiteR
对于html='foo'和类似的输入,包括javascript,像这样的(Sanitize.clean(@post.content)#=>'foo')会覆盖所有基础以防止用户将javascript和html注入(inject)数据库吗?我应该采取额外的步骤来清理用户输入吗? 最佳答案 您可以使用ERB::Util方法html_escape(别名为较短的h)参见:http://ruby-doc.org/stdlib-1.9.3/libdoc/erb/rdoc/ERB/Util.html#method-c-h注意:从Mladen的评论复
这是我的第一个Sinatra项目,我已经很晚了,我意识到当使用ActiveRecord一次发出多个请求时,我遇到了问题。如果我只提出一个请求,那么每个请求都会独立工作。但是当我同时调用两者时,我会失败。到目前为止,我已经将问题范围缩小到同时存在两个ActiveRecord请求的问题。也许我没有正确设置ActiveRecord?我使用PostgreSQL是因为Heroku使用它,并且不想改变。(这个问题也发生在Heroku上。)这是日志:192.168.1.113--[30/Sep/2012:10:33:00MDT]"GET/version/current?platform=androi
我正在使用sinatra+datamapper构建一个小型网络应用程序。该应用程序基于sqlite数据库,该数据库在table1中包含大量记录,而table2中没有任何记录。我的目录结构如下:total32-rw-r--r--1atmastaff189531Δεκ21:35application.rbdrwxr-xr-x6atmastaff20431Δεκ21:10archive/-rw-r--r--@1atmastaff8223Δεκ23:59config.rudrwxr-xr-x10atmastaff34031Δεκ21:38lib/drwxr-xr-x4atmastaff1362
好吧,我是一个巨大的RubyCAS新手,这让我发疯。我已经安装了rubycas-clientgem,并在thisrepo上安装了官方Sinatra安装程序。.完成此设置的方式是,每次我请求一个页面时,我都会收到一张一次性票,该票作为查询附加到URL,如下所示:http://localhost:9393/?ticket=ST-1373928850...等等如果我刷新页面,我会收到一条Sinatra错误消息,提示票已用完!那么我有两个问题。每次重新加载票证是标准行为吗?如何保存session的CAS登录并仍然保留单点退出?我做了什么:我已经尝试在Sinatra中实现:sessions,但这
我有一个在Sinatra应用程序范围内运行的方法,用于检查请求是否安全:secure_request?request.env['HTTPS']=='on'end这工作正常,但是当我从另一个不共享Sinatra应用程序范围的类调用它时,它会尝试发出机架测试请求,并引发错误:参数数量错误(1为0).那么,有没有办法显式指定Sinatra应用程序请求,例如self.request或app.request? 最佳答案 从另一个类调用request方法闻起来像是糟糕的代码设计,将另一个类与您的应用程序紧密耦合。secure_request?在
我想覆盖正常的sinatra内部服务器错误,所以它显示一个erb文件。到目前为止我有这个:set:show_exceptions,:after_handlererror400..510doerb:errorend但它不起作用...有什么想法吗? 最佳答案 这很可能是因为您在开发模式下运行它。不确定你是否可以在那里压制它。但由于大多数时候在生产中显示此错误页面很重要,您只需将RACK_ENV设置为生产即可。例如,如果您这样启动您的应用:bundleexecrubyapp.rb只需添加RACK_ENVRACK_ENV=productio
我想获取正在通过rack-test测试的应用程序实例,以便我可以模拟它的一些方法。我以为我可以简单地将应用程序实例保存在app方法中,但由于某些奇怪的原因不起作用。看起来rack-test只是使用实例来获取类,然后创建自己的实例。我做了一个测试来证明我的问题(它需要gem“sinatra”、“rack-test”和“rr”才能运行):require"sinatra"require"minitest/spec"require"minitest/autorun"require"rack/test"require"rr"describe"instantiatedapp"doincludeRa
我正在尝试让这个SinatraGET请求生效:get'/:year/:month/:day/:slug'doend我知道您可以获得一个参数来处理block参数:get'/:param'do|param|"Hereitis:#{param}."end但是如何在第一个代码块中使用多个block参数?我对其他方法持开放态度。 最佳答案 多个占位符作为哈希存储在params中。#Requestto/2009/10/20/post.htmlget'/:year/:month/:day/:slug'doparams[:year]#=>2009p
我无法使enable:sessions持续存在于passenger/apache上托管的简单Sinatra应用程序。我将session[:authorized]的状态存储在cookie中。当托管在Rack::Handler::Mongrel上时,它在本地工作,但我似乎无法在passenger上获得相同的行为。我尝试了两种启用session的方法,这两种方法都不适用于passenger/apache安装启用:session和使用Rack::Session::Pool,:domain=>'example.com',:expire_after=>60*60*24*365关于如何修复的任何想法