Tag: 机架

Ruby Rack:启动和拆卸操作(Tokyo Cabinet连接)

我在Sinatra的Rack上构建了一个非常简单的REST服务。 它由3个Tokyo Cabinet / Table数据存储区支持,这些数据存储区具有需要打开和关闭的连接。 我有两个用直接Ruby编写的模型类,目前只是连接,获取或放置他们需要的东西,然后断开连接。 显然,这不会长期发挥作用。 我也有像Warden这样的Rack中间件依赖于这些模型类。 管理打开和关闭连接的最佳方法是什么? 据我所知,Rack不提供启动/关闭挂钩。 我想在env中插入一个提供TC / TT对象引用的中间件,但是我必须通过Sinatra将它传递给模型,这看起来效率也不高; 这只会是TC的每请求连接。 我认为每服务器实例生命周期将是更合适的生命周期。 谢谢!

Ruby / Rack中的多部分响应

我希望我的服务器发送多部分响应(multipart / x-mixed-replace)。 我更喜欢使用Sinatra框架或通用Rack应用程序的某种解决方案,但ruby中的任何示例都会很好。 这是我在PHP中尝试做的事情的等价物: <?php header('Content-type: multipart/x-mixed-replace;boundary="rn9012"'); print "–rn9012\n"; print "Content-type: application/xml\n\n"; print "\n”; print “First Part\n”; print “–rn9012\n”; flush(); sleep(5); print “Content-type: application/xml\n\n”; print “\n”; print “Second Part\n”; print “–rn9012–\n”; ?>

在rspec中指定内容类型

我正在尝试构建一个通过POST发送JSON(或XML)的rspec测试。 但是,我似乎无法让它真正起作用: json = {…. data ….}.to_json post ‘/model1.json’,json,{‘CONTENT_TYPE’=>’application/json’} 还有这个 json = {…. data ….}.to_json post ‘/model1.json’,json,{‘Content-Type’=>’application/json’} 有任何想法吗? 谢谢!

如何仅针对特定路径使用Rack中间件?

我想在我的Rack应用程序中运行MyMiddleware ,但仅限于某些路径。 我希望使用Rack::Builder或至少使用Rack::URLMap ,但我无法弄清楚如何使用。 这是我认为可行的,但不是: # in my rackup file or Rails environment.rb: map ‘/foo’ do use MyMiddleware, { :some => ‘options’ } end 或者,更好的是,使用Regexp: map /^foo/ do use MyMiddleware, { :some => ‘options’ } end 但是map似乎最终需要一个应用程序; 它不会仅仅将控制权传回给它的父母。 (实际错误是“ undefined method ‘each’ for nil:NilClass ”从Rack试图将那个结束时do…end块变成app 。) 是否有一个中间件需要一系列中间件和一个路径,并且只在路径匹配时运行它们?

如何从websocket连接握手的头部解码cookie? (ruby)

我在EventMachine.run循环中运行Sinatra应用程序,在我的ws.onopen方法中,我希望检查handshake标头的cookie,以确保传入的请求来自我的webapp的注册用户。 我的Sinatra应用程序包括以下内容: use Rack::Session::Cookie, :key => COOKIE_KEY, :path => ‘/’, :expire_after => 2592000, #30 days :secret => COOKIE_SECRET 我的ws.onopen方法看起来像这样(修剪) ws.onopen { |handshake| cookie, bakesale = handshake.headers[‘Cookie’].split(‘=’) rack_cookie = Rack::Session::Cookie.new(MyApp, { :key => COOKIE_KEY, :path => ‘/’, :expire_after => 2592000, #30 days :secret => COOKIE_SECRET }) decoded = rack_cookie.coder.decode(bakesale) puts “decoded: #{decoded}” } cookie的值与我的COOKIE_KEY匹配就好了,但是decoded的值是nil 我该如何解码传入的cookie数据? – […]

在Rack :: Test中使用Cookies

我正在尝试使用Rack :: Test为我的Sinatra应用程序编写RSpec测试。 我无法理解如何使用cookies。 例如,如果我的应用程序设置了cookie(而不是通过:session),我该如何检查该cookie是否正确设置? 另外,如何使用该cookie发送请求?

无法让rails-cors在rails应用程序中工作

我想在我的rails应用程序中实现CORS,所以我用Google搜索了rack-cors gem。 我按照README中的说法做了一切,相应地更新了Gemfile并更新了application.rb如下所示: module YourApp class Application :any, :methods => [:get, :post, :options] end end end end 但它没有用。 无论我做了什么,在浏览器控制台中我都会收到消息: XMLHttpRequest cannot load https://somewebsite.com. Origin http://0.0.0.0:3000 is not allowed by Access-Control-Allow-Origin. 在阅读了这篇关于github的博文和问题之后,我意识到中间件堆栈中机架中间件的位置可能很重要。 所以我按照github问题的说法做了: module YourApp class Application :any, :methods => [:get, :post, :options] end end end end 在那之后,当我运行rake middleware rack-cors真的处于堆栈的顶端。 但它仍然只是根本行不通。 我一直得到同样的错误。 任何人,请帮忙。

在开发中禁用Sprockets资产缓存

我正在使用Rails 3.2.13和Rails Asset Pipeline。 我想使用资产管道,所以我可以使用SASS和CoffeeScript和ERB作为我的资产,并让Pipeline自动编译它们,所以我不能在开发中关闭管道。 我不是在开发中预编译资产,甚至没有public/assets/目录。 但是,当我对包含的文件进行更改时,例如对_partial.html.erb文件中包含(呈现)的_partial.html.erb文件进行更改,而不更改包含本身的文件(在此示例layout.html.erb ),Sprockets没有检测到更改并使缓存无效,所以我不断获得相同的陈旧文件。 当我在积极开发中执行此操作时,我想禁用任何资产缓存,以便我可以对每个请求进行更改,但我无法弄清楚如何执行此操作。 我在development.rb设置了以下所有内容development.rb : config.action_controller.perform_caching = false config.action_dispatch.rack_cache = nil config.middleware.delete Rack::Cache config.assets.debug = true config.assets.compress = false config.cache_classes = false 尽管如此,即使这样,文件也会显示在tmp/cache/assets/和tmp/cache/sass/并且在将来的请求中无法进行更改。 现在我每次想要看到更改时都必须手动删除这些目录。 不幸的是,资产管道RoR指南的How Caching Works部分的全部内容是: Sprockets使用默认的Rails缓存存储来缓存开发和生产中的资产。 TODO:添加有关更改默认商店的更多信息。 那么,我如何让Sprockets按需编译资产但不缓存结果呢?