Como recarregar módulos raku em tempo de execução, para fins de depuração?


8

Estou carregando módulos dinamicamente no meu aplicativo raku rest / API.

Quero evitar que o servidor seja reiniciado toda vez que fiz alguma modificação nos meus módulos.

Existe uma maneira de recarregar os módulos raku toda vez que você ligar?

try require ::('Foo');

Respostas:


6

Cro faz isso . Você pode criar seu servidor em cima do Cro, é o que eu recomendaria. Como alternativa, você pode estudar o código Cro para saber como ele lida com as reinicializações automáticas. Cro :: Tools :: Runner seria um bom ponto de partida.


4

Você deve levar em consideração que todos os módulos são pré-compilados antes de serem carregados. O que você está carregando não é a fonte, mas o CompUnit que foi gerado a partir dela, que está por padrão em um .precompdiretório. Essa pré-compilação também cuida de versões, por exemplo, mas o principal é que é bytecode, não a fonte.

Não há solução fácil para isso, além de pegar em suas mãos esse maquinário (ou seja, verificar se há alterações na fonte, pré-compilar, carregar os binários pré-compilados onde quer que estejam e executá-los), então acho que, neste Nesse caso, é melhor se perguntar se há realmente um caso de uso para isso; talvez o que você precise fazer seja acelerar de alguma forma a reinicialização do servidor, talvez através da automação usando sake ou executando testes de integração a partir de um gancho git sem a necessidade de reiniciar o servidor


3

Você não pode recarregar um módulo em um processo. Quando uma identidade de módulo é pesquisada, ela é armazenada em cache e a pesquisa dessa identidade pela segunda vez continuará a usar o CompUnit correspondente à primeira vez. A pré-compilação não tem relação com isso.

Vejo:

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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.