Я потратил несколько часов, пытаясь устранить эту проблему, используя документацию yaws и поиск в Интернете. Существующие здесь темы мне не помогли.
Я новичок в erlang и пытаюсь запустить yaws во встроенном режиме, используя пример кода, представленный на http://yaws.hyber.org/embed.yaws. Я что-то упускаю, потому что не могу заставить его работать. У меня есть четыре файла:
ybed.app
{application, ybed_app,
[
{description, "Yaws Embedded Application Test"},
{vsn, "0.1.0"},
{registered, []},
{applications, [kernel, stdlib, yaws]},
{mod, {ybed_app, []}},
{env, []}
]}.
ybed_app.erl
-module(ybed_app).
-behaviour(application).
%% Application callbacks
-export([start/2,
stop/1]).
start(_StartType, _StartArgs) ->
case ybed_sup:start_link() of
{ok, Pid} ->
{ok, Pid};
Other ->
{error, Other}
end.
stop(_State) ->
ok.
ybed_sup.erl
-module(ybed_sup).
-behaviour(supervisor).
%% API
-export([start_link/0]).
%% Supervisor callbacks
-export([init/1]).
start_link() ->
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
init([]) ->
YBed = {ybed, {ybed,start,[]},
permanent,2000,worker,[ybed]},
{ok,{{one_for_all,0,1}, [YBed]}}.
ybed.erl
-module(ybed).
-compile(export_all).
start() ->
{ok, spawn(?MODULE, run, [])}.
run() ->
Id = "embedded",
GconfList = [{id, Id}],
Docroot = "/tmp",
SconfList = [{port, 8000},
{servername, "foobar"},
{listen, {127,0,0,1}},
{docroot, Docroot}],
{ok, SCList, GC, ChildSpecs} =
yaws_api:embedded_start_conf(Docroot, SconfList, GconfList, Id),
[supervisor:start_child(ybed_sup, Ch) || Ch <- ChildSpecs],
yaws_api:setconf(GC, SCList),
{ok, self()}.
Когда я компилирую его (успешно) и пытаюсь запустить приложение, я получаю возвращаемое значение:
{error,{not_loaded,yaws}}
Когда я пытаюсь запустить скомпилированный ybed.erl, ybed:run(), я получаю:
** exception error: undefined function yaws_api:embedded_start_conf/4
in function ybed:run/0 (src/ybed.erl, line 16)
Если я запускаю рыскание до запуска приложения, оно все равно не работает.
Я пока не пытаюсь собирать релизы, просто компилирую и тестирую рыскания во встроенном режиме. Может ли кто-нибудь сказать мне, что мне не хватает?
заранее спасибо