Erlang 无法从命令行启动空的OTP应用程序
我已使用钢筋创建了OTP应用程序框架:Erlang 无法从命令行启动空的OTP应用程序,erlang,Erlang,我已使用钢筋创建了OTP应用程序框架: $ rebar create-app appid=test 然后我用钢筋编译了它,当我运行 $ erl -pa ebin -s test 我得到这个错误 {"init terminating in do_boot",{undef,[{test,start,[],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}} 但是如果我从shell调用start,它会工作: $ erl -pa ebin Erlang
$ rebar create-app appid=test
然后我用钢筋编译了它,当我运行
$ erl -pa ebin -s test
我得到这个错误
{"init terminating in do_boot",{undef,[{test,start,[],[]},{init,start_it,1,[]},{init,start_em,1,[]}]}}
但是如果我从shell调用start,它会工作:
$ erl -pa ebin
Erlang R15B01 (erts-5.9.1) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9.1 (abort with ^G)
1> application:start(test).
ok
如何从OS命令行启动应用程序
编辑:
我觉得我需要跑步
$ erl -pa ebin -s application start test
现在我没有收到任何错误,但应用程序仍然没有启动…erl-pa ebin/-eval应用程序:starttest
由于test_app.erl中的start函数具有arity 2,因此无法使用erl开关-s或-run直接调用它,只能使用这些开关调用arity 0或1,请参阅
您可以添加一个包装器函数来调用start/2,但我认为-eval更优雅 erl-pa ebin/-eval应用程序:开始测试
由于test_app.erl中的start函数具有arity 2,因此无法使用erl开关-s或-run直接调用它,只能使用这些开关调用arity 0或1,请参阅
您可以添加一个包装器函数来调用start/2,但我认为-eval更优雅 当显示一个或多个参数时,-s标志假定参数列表。所以$erl-pa ebin-s应用程序启动测试将调用application:start[test],这将无法按预期工作
以下是一个解决方案,它可能不是最佳解决方案:
创建包含以下内容的源文件src/test_init.erl:
-module(test_init).
-compile(export_all).
init() ->
application:start(test).
然后:
现在,测试应用程序应该正在运行:当出现一个或多个参数时,-s标志假定参数列表。所以$erl-pa ebin-s应用程序启动测试将调用application:start[test],这将无法按预期工作
以下是一个解决方案,它可能不是最佳解决方案:
创建包含以下内容的源文件src/test_init.erl:
-module(test_init).
-compile(export_all).
init() ->
application:start(test).
然后:
现在测试应用程序应该正在运行:我还认为使用-eval标志更优雅:我还认为使用-eval标志更优雅: