如何在开发otp应用程序时重新加载所有otp代码?

时间:2015-03-14 08:31:50

标签: erlang erlang-shell

虽然我正在学习OTP,但我已经对.app和.erl文件进行了大量更改,并重新运行我的应用程序以查看更改的效果。

我尝试了以下一系列命令来获取所有新的更改,但它似乎无法正常工作:

编译src文件......

erlc -o ebin src/*.erl

...其次是erlang shell:

application:stop(my_app).
application:unload(my_app).
application:load(my_app).
application:start(my_app).

但是,这似乎不起作用。我发现工作的唯一方法是退出erlang shell,重新编译应用程序,然后运行application:start(my_app).

是否有更简单的方式来接收我的更改?

1 个答案:

答案 0 :(得分:2)

调用应用程序:load(App)(停止和卸载后)将重新加载.app文件而不是模块。正如文档所说:“请注意,该函数不会加载实际的Erlang对象代码。”

如果您要使用版本进行升级,您将发送一个.appup文件,该文件指定在升级到新版本时要重新加载哪些模块(如果只有一个或两个已更改,则无需重新加载所有模块),但如果您只是在开发并且不想停止并重新启动所有内容,则必须设置自己的帮助功能来重新加载代码。

E.g。如果你相信.app文件总是列出应用程序的所有模块,你可以使用应用程序读取该条目(重新加载后):get_key(应用程序,模块),然后循环遍历调用c:l(模块)的模块列表他们每个人。请记住,一直重新加载所有模块对于可能在两次重新加载时保留的过程非常苛刻。