私はかなり新しいですが、複数の並列要求の場合のクラスインスタンス変数の振る舞いを理解したいと思います。Sinatra複数の並列要求変数の振る舞い
Iの特定の操作のための要求ごとに毎回呼び出され私のコントローラクラス内のメソッド(この場合は作成)
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(データ))と呼ばれる持って
複数のリクエストが来たときに、@validatorクラスのインスタンス変数がどのように動作するか少し混乱します。それは複数の要求の間で共有されていますか?これをローカル変数ではなくクラスインスタンス変数として宣言することをお勧めしますか?
私は既存のコードベースに取り組んでおり、ローカル変数ではなくクラスインスタンス変数として@validatorを作成する意図を理解したいと考えています。
require 'sinatra'
class Foo
def self.bar
@test = Time.now
puts @test
end
end
get '/' do
Foo.bar
end
を、あなたはすべての呼び出しで、あなたは(あなたのコード内のschemaValidate)時間の新しいインスタンスを作成しているので、それは、何もしません表示されます:
私は、Timeの新しいインスタンスを作成するたびに、メモリ内のアドレスが新しいことを理解しています。私の質問は、最初の着信要求の後、テストポイントがa1であり、2回目の着信要求後にa2であることを示します。最初のリクエストのコードのどこかに、クラスインスタンスとしてa1ではなくa2のテストポイントがa2(2番目のリクエストによって変更されている)になってはならない場合、varibaleはクラスのすべてのインスタンスで共有されます。 – madcolonel10