我想为我编写简单的记录器,将消息放入内存中,并在后台每隔 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
在开发中,这很好用,可以在和方法中buffer()
访问相同@buffer
的变量。但是一旦我进入生产或登台环境,即一旦我落后于乘客,这似乎不再被共享。log
write_buffer
@buffer
任何指针?