Ruby Sinatra多个并行请求变量行为

Ruby Sinatra多个并行请求变量行为,ruby,variables,sinatra,instance-variables,Ruby,Variables,Sinatra,Instance Variables,我是ruby的新手,希望了解类实例变量在多个并行请求情况下的行为 在我的控制器类中有一个方法,在这种情况下,每次创建特定操作的请求都会调用该方法 class DeployProvision def self.create(data) raise "Input JSON not received." unless data # $logger.info input_data.inspect failure = false re

我是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.createdata

我对@validator类实例变量在多个请求出现时的行为有点困惑。它在多个请求之间共享。将其声明为类实例变量而不是局部变量是一个好主意吗


我正在使用现有的代码库,希望了解将@validator创建为类实例变量而不是局部变量的意图。

您可以编写如下超简单脚本:

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

get '/' do
  Foo.bar
end
您将看到它什么也不做,因为每次调用都会在代码中创建TimeSchemaValidate的新实例

如果您使用memonization并使用类似@validator | |=SchemaValidate.new的内容,则会在请求之间存储一个SchemaValidate实例

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

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


祝您好运

我知道每次我们创建一个新的时间实例时,内存中的地址都是新的。我的问题是,在第一个传入请求之后,测试点的地址是a1,在第二个传入请求之后是a2。如果第一个请求的代码中的某个地方不应该测试由第二个请求修改的a2,而不是a1,因为类实例varible在类的每个实例之间共享。