メッセージをメモリに入れ、バックグラウンドでX秒ごとにデータベースに書き込む単純なロガーを書きたいと思います。
バッファリングされたロガー コードは次のとおりです。
module BufferedLogger
def buffer
@buffer ||= []
end
def log( message )
buffer << message
end
def write_buffer
while message = buffer.shift do
# save the message in nosql
end
end
def repeat_every( interval )
Thread.new do
loop do
start_time = Time.now
yield
elapsed = Time.now - start_time
sleep([interval - elapsed, 0].max)
end
end
end
extend self
thread = repeat_every(10) do
write_buffer
end
end
開発中、これは正常に機能し、メソッドとメソッドの両方で同じ var にbuffer()
アクセスします。しかし、本番環境またはステージング環境に移動するとすぐに、つまり乗客の後ろにいるとすぐに、これはもう共有されていないようです。@buffer
log
write_buffer
@buffer
ポインターはありますか?