代码之间有什么区别:add_path和在命令行上使用-pa?

时间:2013-12-13 15:49:24

标签: erlang otp

这是我的.erlang文件:

code:add_path("/home/root/projects/myapp/ebin").
code:add_path("/home/root/projects/esmtp/ebin").
application:load(esmtp),
application:set_env(esmtp, smarthost, {"localhost",25}),
application:set_env(esmtp, default_from, "<stuff>"),
application:start(esmtp).

当我跑步时:

erl -boot myapp 

失败了:

{"init terminating in do_boot",{'cannot get bootfile','myapp.boot'}}

Crash dump was written to: erl_crash.dump
init terminating in do_boot ()

但如果我跑:

erl -boot myapp -pa /home/root/projects/myapp/ebin

工作正常。这让我相信命令行上的-paa与.erlang文件中的代码:add_path()不同。我知道.erlang文件有效,因为esmtp加载并正确运行。 -pa和代码有什么区别:add_path()?

1 个答案:

答案 0 :(得分:4)

加载启动文件后会读取并执行.erlang文件,因此当erlang查找启动文件时,路径尚未添加。

另一方面,在vm开始寻找引导文件之前添加-pa,然后找到它。