私は、次のスクリプトを使用して、非常に単純なWebサーバーを作成すると呼ばれる初期化:すべての要求のための新しいシナトラオブジェクトが、一度だけ
require 'sinatra'
class MyApp < Sinatra::Base
def initialize(app = nil)
super(app)
puts "******** constructing myapp **********"
end
get '/' do
return "object id: #{object_id}, class #{self.class}"
end
end
MyApp.run!
私はこの小さなWebサーバーを実行してから初めてwget -q -O - http://localhost:4567
を呼び出すと、私は私のサーバーを実行している私のコンソールでこれを参照してください。
******** constructing myapp **********
127.0.0.1 - - [28/Jan/2017:16:47:39 EST] "GET/HTTP/1.1" 200 31
- ->/
とwgetの版画:
object id: 10454240, class MyApp
期待どおり、最初の呼び出しでMyAppオブジェクトが作成され、initialize
が呼び出されます。
127.0.0.1 - - [28/Jan/2017:16:49:11 EST] "GET/HTTP/1.1" 200 31
- ->/
そして、これはwgetプリントの出力:2番目の呼び出しで
object id: 9387860, class MyApp
ので、私が持っている私はwget -q -O - http://localhost:4567
への2回目の呼び出しを行う場合
はその後、私はこれを参照してくださいMyAppの別のインスタンス(object_idはフリーリスト呼び出しと同じ値を持たないため)しかしinitialize
は呼び出されません。新しいオブジェクトを作成してinitialize
への呼び出しをバイパスすることは可能ですか?
おそらく、それがそうだと思われるごとに新しいインスタンスを作成していないことがあります。 – tadman
Sinatraを知らないうちに、おそらくAppインスタンスが複製されたり、複製されたりしますか? – spickermann