Sinatra多个并行请求可变行为



我是Ruby的新手,想了解类实例变量在多个并行请求中的行为。

我在控制器类内有一个方法,每次为特定操作的请求称为每次都称为(在这种情况下创建(

class DeployProvision
    def self.create(data)
        raise "Input JSON not received." unless data
        # $logger.info input_data.inspect
        failure = false
        response_result = ""
        response_status = "200"
        @validator = SchemaValidate.new
        validation = @validator.validate_create_workflow(data.to_json)
    end
end

此方法称为(deployprovision.create(data((

我对@Validator类实例变量在多个请求时的行为有些困惑。它在多个请求中共享吗?将其声明为类实例变量而不是本地变量是一个好主意?

我正在研究现有代码库,并想了解将@Validator作为类实例变量而不是本地变量创建的意图。

您可以像这样编写超简单脚本:

require 'sinatra'
class Foo
  def self.bar
    @test = Time.now
    puts @test
  end
end
get '/' do
  Foo.bar
end

,您会看到它无能为力,因为在每个呼叫中,您都在创建新的时间实例(代码中的schemavalidate(。

如果您使用了回忆,并且有类似@validator ||= SchemaValidate.new之类的东西,则在请求之间会有一个存储的schemavalidate实例。

我认为这不会改变性能,我不知道为什么有人会这样做。

您可以使用Sinatra的超简单脚本来测试它的行为。

祝您好运!

最新更新