Как перезагрузить модули raku во время выполнения, для целей отладки? - PullRequest
5 голосов
/ 06 ноября 2019

Я загружаю модули динамически в мое приложение raku rest / API.

Я хочу избежать перезапуска сервера каждый раз, когда я делаю какие-либо изменения в своих модулях.

Есть ли способдля перезагрузки модулей raku каждый раз, когда вы звоните, требуется?

try require ::('Foo');

Ответы [ 3 ]

5 голосов
/ 06 ноября 2019

Кро делает это . Вы можете построить свой сервер поверх Cro, вот что я бы порекомендовал. Кроме того, вы можете изучить код Cro, чтобы узнать, как он обрабатывает автоматический перезапуск. Cro :: Tools :: Runner будет хорошей отправной точкой для метинксов.

3 голосов
/ 06 ноября 2019

Необходимо учитывать, что все модули предварительно скомпилированы перед загрузкой. То, что вы загружаете, это не источник, а CompUnit , сгенерированный из него, который по умолчанию находится в каталоге .precomp. Эта прекомпиляция также заботится, например, о версиях, но главное, что это байт-код, а не источник.

Нет простого обходного пути, кроме как взять в руки этот механизм (то есть проверитьесли в исходном коде есть изменения, прекомпилируйте его, загрузите предварительно скомпилированные двоичные файлы, где бы они ни находились, и запустите их), так что я думаю, что в этом случае лучше спросить себя, действительно ли есть вариант использования для этого;возможно, вам нужно как-то ускорить перезапуск сервера, возможно, с помощью автоматизации с использованием sake или запустив интеграционные тесты с помощью git hook без необходимости перезапуска сервера

2 голосов
/ 10 ноября 2019

Вы не можете перезагрузить модуль в процессе. При поиске идентификатора модуля он кэшируется, и при повторном поиске этого идентификатора будет продолжаться использование CompUnit, который соответствует первому разу. Прекомпиляция не имеет к этому никакого отношения.

См .:

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

...