2011-01-11 22 views

Respuesta

5

No es el Scheduler project on SqueakSource que se parece a cron para Smalltalk. Desde el resumen:

"Start a new task scheduler and keep it around" 
scheduler := TaskScheduler new. 
scheduler start. 
"Let's save the image every hour" 
scheduler 
    do: [Smalltalk snapshot: true andQuit: false] 
    every: 60 minutes.

Se puede combinar eso con el código de bloqueo o de saveImageInBackgroundNicely OSProcess mencionado anteriormente y tienen una solución fácil agradable.

+0

Gracias. Scheduler funciona bastante bien. Acabo de utilizar: do: [instantánea actual SmalltalkImage: true andQuit: false.] Y también hizo que smalltalk Run as Administrator para que pudiera guardar el archivo. – elviejo79

5

Result of a discussion on the mailing list, con un poco de hielo en torno a correr sólo por hora:

[[self blockUI. 
    self doUpdate. 
    SmalltalkImage current snapshot: true andQuit: false. 
    self unblockUI. 
    (Delay forDuration: (Duration hours: 1)) wait] repeat] fork 
+0

Más abajo [ese mismo hilo] (http://lists.gforge.inria.fr/pipermail/pharo-project/2010-July/029851.html) también hay una mención de 'UnixProcess saveImageInBackgroundNicely' de * OSProcess * que puede guardar una imagen usando un proceso Unix en segundo plano. Puede preferir usar esto si no desea que la imagen se bloquee cada hora. –

+0

Hmm. No puedo encontrar un método llamado saveImageInBackgroundNicely en Pharo 1.1.1. Ni una clase UnixProcess. Me pregunto qué pasó allí. – nes1983

+0

Esa clase es de [OSProcess] (http://www.squeaksource.com/OSProcess.html) que no está incluida en la base Pharo. –

1

Puede hacerlo y podría funcionar bien.

Pero yo no lo haría.

No hay fot persistencia en la producción.

¿Por qué?

Porque las imágenes son como su sesión en su computadora portátil. Guardar su imagen es como poner su computadora portátil a dormir: persiste todo.

Y a la larga, algunos estados tendrán alguna mierda inexplicable que puede complicar algo y tendrá que hacer un reinicio duro.

No ayuda tratar de ser perfeccionista al respecto (o tal vez lo haga, pero ciertamente no es económico). Simplemente sucederá y reiniciar su computadora portátil es la solución más barata para tener un estado fresco. Pero eso para su aplicación smalltalk puede no ser tan barato.

Un reinicio por hardware en smalltalk significa que tendrá que tomar una nueva imagen y volver a cargar todo su código (se puede automatizar, pero la experiencia dice que podría llevar mucho tiempo).

+0

+1 por traer esta vista, pero no estoy de acuerdo. La persistencia basada en imágenes se puede usar con éxito.Creo que incluso Dabble DB se basó en él (usando una imagen por cliente). Puede ser más difícil identificar ciertos problemas en un gráfico de objetos complejo que una base de datos basada en esquemas y Squeak solo puede manejar tanta información, pero se trata de intercambios. –

+1

Además, para lograr una persistencia razonable en las imágenes, debe ser flexible respecto de las transacciones. Si el servidor (o la máquina virtual) se cae por algún motivo antes de guardarlo ** ** le dolerá. No todas las aplicaciones pueden permitir el lujo de no ser ÁCIDO. –

Cuestiones relacionadas