5

我正在使用 Cowboy 和 erlang.mk 进行开发,目前我的流程是: 1. 在 vi​​ 中更改代码,保存,运行 make 2. 关闭 Cowboy,再次启动 Cowboy(我在控制台模式下运行 Cowboy 以进行跟踪/调试)

有没有办法让 Cowboy 以尽可能少的延迟自动重新加载和重启?我知道我可以将 Cowboy stop 和 start 添加到我的 makefile 但也许有更好/响应更快的方式?

我看到有来自 rustyio 的同步包,但是必须直接将它挂接到我的应用程序中似乎过于复杂。

4

4 回答 4

3

我一直用钢筋。在 rebar.config 中,我有

 {deps,[
        {sync,         ".*", {git, "git://github.com/rustyio/sync", {tag,"master"}}},
 }

我使用 .erlang 文件,通常放在 src/.erlang 中,有以下两行

 code:add_path("../deps/sync/ebin").
 sync:go().

现在,每当我保存文件时,它都会重新加载。我看不出为什么这不适用于牛仔

于 2014-12-20T10:45:38.247 回答
2

你可以在运行 Erlang 版本的同时结合 relx 和 rusty/sync 来重新加载代码。它就像魅力一样工作,并且有关于如何进行此类设置的教程。

于 2014-12-19T22:36:26.757 回答
0

看看p6hot_deploy.erl

这是我的公司用于简单的自动重新部署的方法。它每秒扫描一次文件系统,寻找日期已更改的模块并重新加载它们。

所以你的过程将是:编辑、保存、制作

此模块将看到文件更改并强制重新加载

这不是带有发布和东西的花哨的 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).

它尝试以安全的方式循环输入新代码。

于 2014-12-18T01:23:56.727 回答
0

Rustyio 对于休闲(sideproject)使用确实有点复杂。大多数方法都集中在 rebar3 上。

对于 erlang.mk 用户,reload.mk 插件运行良好。只需将其添加到 Makefile deps 中,运行程序make run RELOADABLE=1并使用make reload.

于 2021-06-01T08:56:54.770 回答