【发布时间】:2019-11-10 08:05:44
【问题描述】:
我正在我的 raku rest/API 应用程序上动态加载模块。
我想避免每次对我的模块进行任何修改时服务器都重新启动。
有没有办法在每次调用 require 时重新加载 raku 模块?
try require ::('Foo');
【问题讨论】:
标签: raku
我正在我的 raku rest/API 应用程序上动态加载模块。
我想避免每次对我的模块进行任何修改时服务器都重新启动。
有没有办法在每次调用 require 时重新加载 raku 模块?
try require ::('Foo');
【问题讨论】:
标签: raku
Cro 执行this。您可以在 Cro 之上构建您的服务器,这就是我的建议。或者,您可以研究 Cro 代码以了解它如何处理自动重启。 Cro::Tools::Runner 我认为是一个很好的起点。
【讨论】:
在加载之前,您必须考虑到所有模块都是precompiled。您正在加载的不是源代码,而是从中生成的CompUnit,默认情况下位于.precomp 目录中。例如,这种预编译也会处理版本,但主要的是它是字节码,而不是源代码。
除了掌握机器(即检查源代码中是否有更改、预编译、加载预编译的二进制文件并运行它们)之外,没有简单的解决方法,所以我认为,在这种情况下,最好问问自己是否真的有这个用例;也许您需要做的是以某种方式加速服务器重新启动,可能通过使用sake 的自动化,或者从 git 挂钩运行集成测试而无需重新启动服务器
【讨论】:
您不能在进程中重新加载模块。当查找模块标识时,它会被缓存,并且第二次查找该标识将继续使用第一次匹配的 CompUnit。预编译与此无关。
见:
【讨论】: