Tag: 机架

Rack Session Cookie和Sinatra – 设置和访问数据

我正在使用机架会话池,但是我的用户会被一个网络服务器线程踢到另一个网络服务器线程上,使会话数据到期。 我开始在Sinatra中启用:会话,但是我无法使用它,因为我有使用Sinatra的多个应用程序(它似乎正在使用相同的密钥 – 不确定这是因为它是否是相同的主机) 因此,由于我的应用程序会相互破坏,我现在正在尝试使用Rack Session Cookie并设置变量(与启用相同:会话,但您可以设置变量) 伟大,所以有效! 但是现在我无法以我使用它的方式访问会话数据,在Rack Session Pool和enable:sessions中 session[:user] = nick puts session[:user] 你明白了…… 问题是为什么我可以在Pool和Sinatra中使用session [:user]启用会话数据,但是不能在Rack Session Cookie中访问会话数据? 我错过了什么吗? 我正在做的就是下面 config.ru use Rack::Session::Cookie, :key => ‘key’, :domain => “localhost”, :path => ‘/’, :expire_after => 14400, # In seconds :secret => ‘secret’ 编辑: 做了一些测试并发现它实际上把它放在会话变量中,但是一旦它移动到新方法或重定向会话变量似乎被删除(这个cookie真的大于4KB?!) – 它可以’因为启用:会话工作得很好

机架rack.input变量被截断?

我写了一段Rack Middleware来自动解压缩压缩的请求体。 代码似乎工作得很好,但是当我将它插入我的rails应用程序时,我从ActionController :: ParamsParser获得了“Invalid JSON”失败。 作为一种调试机制,我正在将压缩内容和解压缩的内容写入文件(以确保代码正常工作),并且我确实收到了原始的JSON文档(在客户端将其拉出之前)。 我发布的数据是 JSON数据,解压缩的内容被检测为来自http://jsonlint.com的有效JSON。 我有什么想法我做错了吗? class CompressedRequests def initialize(app) @app = app end def call(env) input = env[‘rack.input’].read #output the zipped data we received File.open(‘/Users/ben/Desktop/data.gz’, ‘w+’) do |f| f.write input end if env[‘REQUEST_METHOD’] =~ /(POST|PUT)/ if env.keys.include? ‘HTTP_CONTENT_ENCODING’ new_input = decode(input, env[‘HTTP_CONTENT_ENCODING’]) env[‘rack.input’] = StringIO.new(new_input) #output our decoded data (for […]

如何部署线程安全的异步Rails应用程序?

我已经在网上阅读了大量关于不同版本的ruby和rails中的线程安全性和性能的材料,我想我现在对这些事情了如指掌。 讨论中似乎奇怪的是如何实际部署异步Rails应用程序。 在谈论应用程序中的线程和同步时,人们想要优化两件事: 利用所有CPU内核,最小化RAM使用率 能够在先前的请求等待IO时提供新请求 第1点是人们(正确地)对JRuby感到兴奋的地方。 对于这个问题,我只是想优化第2点。 说这是我的应用程序中唯一的控制器: TheController “hello” end def slow render :text => User.count.to_s end end fast没有IO,每秒可以服务数百或数千个请求,而且必须通过网络发送请求,等待工作完成,然后通过网络接收答案,因此比fast慢得多。 因此,理想的部署将允许数百个请求fast完成,而请求slow等待IO。 围绕Web的讨论似乎缺少的是堆栈的哪一层负责实现这种并发。 thin有一个–threaded标志,它将“在线程中调用机架应用程序[实验]” – 是否为每个传入请求启动一个新线程? 在持续存在并等待传入​​请求的线程中假装机架应用程序实例? 瘦是唯一的方式还是其他人? ruby运行时是否对优化第2点很重要?

如何使用Rspec在Sinatra中测试助手块?

我正在编写一个sinatra应用程序并使用rspec和rack / test进行测试(如sinatrarb.com所述)。 到目前为止,它一直很棒,直到我将一些相当程序性的代码从我的域对象移动到sinatra助手。 从那时起,我一直在试图弄清楚如何孤立地测试这些?

为什么在按Control-C之前Foreman没有输出一些东西?

我刚刚进入rails编程,看起来我可以使用两个程序在本地运行我的项目:rackup和foreman。 我注意到的一个区别是工头不会输出一些我期望看到的东西,我会看到我是否运行了机架,直到我按ctrl + c关闭服务器。 然后显示所有这些消息,就像它们被隐藏一样。 是否有一个原因? 我怎样才能让工头更加冗长?

如何使用(ruby)机架中间件组件设置cookie?

我正在为一个需要有条件地设置cookie的rails应用程序编写机架中间件组件。 我目前正试图设法设置cookie。 从谷歌搜索它似乎应该工作: class RackApp def initialize(app) @app = app end def call(env) @status, @headers, @response = @app.call(env) @response.set_cookie(“foo”, {:value => “bar”, :path => “/”, :expires => Time.now+24*60*60}) [@status, @headers, @response] end end 它不会给出错误,但也不会设置cookie。 我究竟做错了什么?

使用Rack :: Session :: Cookie删除当前会话

我觉得我在这里遗漏了一些明显的东西,我希望我发布这个时候有人会因为我失踪的谷歌搜索链接而感到羞耻:-) enable :sessions get ‘/logout’ do # What goes here to kill the session? end

faye ruby​​客户端无法正常工作

我在我的Rails 2.1应用程序上使用faye。 经过测试和修复很多事情后, faye ruby client无法正常工作。 这是我的服务器代码。 require ‘faye’ server = Faye::RackAdapter.new(:mount => ‘/faye’, :timeout => 45) EM.run { thin = Rack::Handler.get(‘thin’) thin.run(server, :Port => 9292) server.bind(:subscribe) do |client_id, channel| puts “[ SUBSCRIBE] #{client_id} -> #{channel}” end server.bind(:unsubscribe) do |client_id, channel| puts “[UNSUBSCRIBE] #{client_id} -> #{channel}” end server.bind(:disconnect) do |client_id| puts “[ DISCONNECT] #{client_id}” end […]

何处将Rack :: Deflater插入机架?

我目前有以下内容: use Rack::Rewrite use Rack::Cache, {:verbose=>true, :metastore=>”memcached://localhost:11211/rack-cache/meta”, :entitystore=>”memcached://localhost:11211/rack-cache/body”} use Rack::Rewrite use Rack::Lock use Rack::Deflater use ActionController::Failsafe use # use ActionController::Session::DalliStore, # use Rails::Rack::Metal use ActionController::ParamsParser use Rack::MethodOverride use Rack::Head use ActionController::StringCoercion use Sass::Plugin::Rack use Hassle use ActiveRecord::ConnectionAdapters::ConnectionManagement use ActiveRecord::QueryCache run ActionController::Dispatcher.new 我可能错了,但将Deflater移到顶端是没有意义的吗? 这样任何和所有流量都被gzip压缩。 谢谢您的帮助。

Ruby on rails – 机架中间件排除 – 是否可能?

我正在尝试机架中间件,在单独的层中进行身份validation。 问题是,所有请求都通过这一层。 我不希望像css,javascript这样的资产请求通过身份validation中间件。我也不希望注销流程通过这个。 在application.rb中 config.middleware.use AuthClient::MyFilterClass 我期待着类似的东西 config.middleware.use AuthClient::MyFilterClass, :exclude => [:logout,’*/assets/*’] 有没有办法从中间件中排除自定义路径/操作?