我正在开发Cowboy和erlang.mk,目前我的流程是: 1.在vi中更改代码,保存,运行make 2.关闭牛仔,再次启动牛仔(我在控制台模式下运行牛仔以进行跟踪/调试)
有没有办法让Cowboy重新加载并自动重启,并尽可能少地延迟?我知道我可以添加牛仔停止并开始我的makefile但也许有更好/更敏感的方式?
我看到有来自rustyio的同步软件包,但是直接将它挂钩到我的应用程序中似乎过于复杂。
答案 0 :(得分:1)
您还可以在运行Erlang版本的同时将relx和rusty / sync结合使用以进行代码重新加载。它就像魅力一样,并且有关于如何进行这种设置的教程。
答案 1 :(得分:1)
我一直在使用钢筋。在rebar.config中,我有
{deps,[
{sync, ".*", {git, "git://github.com/rustyio/sync", {tag,"master"}}},
}
我使用.erlang文件,通常放在src / .erlang中,并带有以下两行
code:add_path("../deps/sync/ebin").
sync:go().
现在,每当我保存文件时,都会重新加载。我认为没有理由认为这不适合牛仔
答案 2 :(得分:0)
这是我公司用于简单自动重新部署的内容。 它每秒扫描文件系统一次,查找日期已更改的模块并重新加载它们。
所以你的过程将是: 编辑,保存,制作
此模块将看到文件更改并强制重新加载
它不是带有版本和内容的花哨的OTP方式,而是更低级别的简单代码交换。
注意:您必须更改此功能才能使用,因为这取决于我的日志记录宏和内容,但您应该通过查看它来获得要点。
关键部分是这个功能:
reload(Module) ->
case code:purge(Module) of
true -> ?lwarn("Process killed as result of reloading: ~p",[Module]);
false -> ok
end,
code:load_file(Module).
它试图以安全的方式循环使用新代码。
答案 3 :(得分:0)
Rustyio 对于临时(sideproject)使用来说确实有点复杂。大多数方法侧重于 rebar3。
对于 erlang.mk 用户,reload.mk plugin 运行良好。只需将其添加到 Makefile deps 中,使用 make run RELOADABLE=1
运行程序并使用 make reload
重新加载。