Ruby: asegúrese de que Syslog se cierre
Pregunta
¿Es absolutamente crítico que siempre cierre Syslog cuando termine de usarlo?¿Hay un enorme impacto negativo por no hacerlo?
Si resulta que definitivamente lo necesito, ¿cuál es una buena manera de hacerlo?Estoy abriendo Syslog en mi constructor de clases y no veo una manera de hacer destructores de clases en Ruby, y actualmente tengo algo parecido a esto:
class Foo
def initialize
@@log = Syslog.open("foo")
end
end
No veo inmediatamente el lugar donde Syslog.close
La llamada debería ser, pero ¿qué recomiendas?
Solución
El método abierto acepta un bloque.Haz algo como esto:
class Foo
def do_something
Syslog.open do
# work with the syslog here
end
end
end
Otros consejos
Parece que lo estás abriendo como una variable de clase...entonces la forma correcta sería hacer...
class Foo
def initialize
@@log = Syslog.open("foo")
end
def Foo.finalize(id)
@@log.close if @@log
end
end
Aunque esto no es necesariamente predecible ni respaldado.Es la forma de hacerlo si vas a mantener el código como lo haces.