¿Cómo recargar módulos raku en tiempo de ejecución, con fines de depuración?

8

Estoy cargando módulos dinámicamente en mi aplicación raku rest / API.

Quiero evitar que el servidor se reinicie cada vez que realice alguna modificación en mis módulos.

¿Hay alguna manera de volver a cargar los módulos raku cada vez que llame?

try require ::('Foo');
David Romero
fuente

Respuestas:

6

Cro hace esto . Puedes construir tu servidor encima de Cro, eso es lo que recomendaría. Alternativamente, puede estudiar el código Cro para aprender cómo maneja los reinicios automáticos. Cro :: Tools :: Runner sería un buen punto de partida, creo.

Holli
fuente
4

Debe tener en cuenta que todos los módulos están precompilados antes de cargarlos. Lo que está cargando no es la fuente, sino la CompUnit que se ha generado a partir de ella, que está por defecto en un .precompdirectorio. Esta precompilación también se encarga de las versiones, por ejemplo, pero lo principal es que es bytecode, no la fuente.

No hay una solución fácil para eso, aparte de tomar en sus manos esa maquinaria (es decir, verificar si hay cambios en la fuente, precompilarla, cargar los binarios precompilados donde sea que estén y ejecutarlos), así que creo que, en este caso, es mejor preguntarse si realmente hay un caso de uso para esto; tal vez lo que necesita hacer es acelerar de alguna manera el reinicio del servidor, tal vez a través de la automatización usando sake o ejecutando pruebas de integración desde un gancho git sin la necesidad de reiniciar el servidor

jjmerelo
fuente
3

No puede volver a cargar un módulo en un proceso. Cuando se busca la identidad de un módulo, se almacena en caché, y al buscar esa identidad por segunda vez continuará utilizando la CompUnit que coincide la primera vez. La precompilación no tiene relación con esto.

Ver:

https://github.com/rakudo/rakudo/blob/0b8ede6c459be752adef9cbbf7b59c961d9df0b0/src/core.c/CompUnit/Repository/Installation.pm6#L445-L453

https://github.com/rakudo/rakudo/blob/0b8ede6c459be752adef9cbbf7b59c961d9df0b0/src/core.c/CompUnit/Repository/FileSystem.pm6#L13-L21

ugexe
fuente