Erlang / Y aws: невозможно запустить веб-сервер в приложении с использованием файла .conf - PullRequest
1 голос
/ 27 марта 2020

Я немного растерялся. Y AWS отлично работает, как служба во время загрузки в LXQt 19.04. Но я намеревался использовать ограничитель скорости; установив его в arg_rewrite_mod. Я полагаю, что если одна виртуальная машина запустит Y AWS, а другое - мое приложение и правильно установит пути к кодам, это приведет к снижению производительности, так как для вызовов с ограничением скорости будет использоваться ОС на базе ОС C, а не Erlang IP C. Следовательно, должна быть служебная информация IP C ОС, а не EVM, верно?

Я просто хотел, чтобы все под одной крышей устраняло это. Это одна вещь, где, вероятно, есть несколько способов решения проблемы (т.е. разделение моего проекта и дублирование частей, где это необходимо), но мне нравится «простота» всего в одном месте.

Я получаю ошибка, {badmatch, {error, enoent}}, в оболочке после:

code:add_patha("/usr/lib/yaws/ebin").
application:start(yaws).

Это происходит в строке 548 в yaws_server:setup_dirs/1 ( Github )

setup_dirs(GC) ->
    Dir = yaws:id_dir(GC#gconf.id),
    Ctl = yaws:ctl_file(GC#gconf.id),
    ok = filelib:ensure_dir(Ctl),
    case file:list_dir(Dir) of
        {ok, LL} ->
            lists:foreach(
              fun(F) ->
                      file:delete(filename:join([Dir, F]))
              end, LL -- ["CTL"]); %%%  <---- LINE 548
        {error, RSN} ->
            error_logger:format("Failed to list ~p probably "
                                "due to permission errs: ~p",
                                [Dir, RSN]),
            erlang:error(RSN)
    end.

I создал UNIX группу appname, состоящую из меня и пользователя yaws. Я ходил по разным каталогам, которые нашел с помощью sudo find / -group yaws -type d, и установил права доступа группы к тому же владельцу, а также переназначил группу с yaws на appname .... Я полагаю, поскольку я не установил id это "default". Мои журналы (/var/log/yaws/report.log), которые я надеялся, укажут на проблему. Они пусты.

Я, по сути, использую файл /etc/yaws/yaws.conf по умолчанию. Раздел сервера был удален и помещен в /etc/yaws/conf.avail/ с символической ссылкой в ​​/etc/yaws/conf.d/.

ОБНОВЛЕНИЕ: отчет cra sh ----

2020-03-27T08:30:04.131073-05:00 notice: Yaws: Using config file /etc/yaws/yaws.conf

2020-03-27T08:30:04.136142-05:00 error: use_old_ssl in yaws.conf is no longer supported - ignoring

2020-03-27T08:30:04.137441-05:00 notice: Yaws: Using global subconfig file /etc/yaws/conf.d/localhost.conf

2020-03-27T08:30:04.140979-05:00 error:
    crasher:
        initial call: yaws_server:init/1,
        pid: <0.114.0>,
        registered_name: [],
        error: {{badmatch,{error,enoent}},
            [{yaws_server,setup_dirs,1,[{file,"yaws_server.erl"},{line,548}]},
            {yaws_server,init2,5,[{file,"yaws_server.erl"},{line,224}]},
            {gen_server,init_it,2,[{file,"gen_server.erl"},{line,374}]},
            {gen_server,init_it,6,[{file,"gen_server.erl"},{line,342}]},
            {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,249}]}]},
        ancestors: [yaws_sup,<0.108.0>],
        message_queue_len: 0,
        messages: [],
        links: [<0.109.0>,#Port<0.6>],
        dictionary: [{gc,{gconf,"/usr/lib/yaws",false,612,"/var/log/yaws",
                ["/usr/local/lib/yaws-appmods/ebin","/usr/lib/yaws/examples/ebin"],
                [],[],30000,nolimit,400,1000000,8000,nolimit,[],10240,[],0,30,
                ["/usr/local/lib/yaws-appmods/include","/usr/lib/yaws/examples/include"],
                "/usr/bin/php-cgi","Yaws 2.0.6","default",false,[],8,undefined,
                [inet],yaws_session_server,undefined,120000,3600000,disable}},
        {start_time,{{2020,3,27},{8,30,4}}}],
        trap_exit: true,
        status: running,
        heap_size: 1598,
        stack_size: 27,
        reductions: 32410;
    neighbours:

2020-03-27T08:30:04.141195-05:00 error:
    supervisor: {local,yaws_sup},
    errorContext: start_error,
    reason: {{badmatch,{error,enoent}},
        [{yaws_server,setup_dirs,1,[{file,"yaws_server.erl"},{line,548}]},
        {yaws_server,init2,5,[{file,"yaws_server.erl"},{line,224}]},
        {gen_server,init_it,2,[{file,"gen_server.erl"},{line,374}]},    
        {gen_server,init_it,6,[{file,"gen_server.erl"},{line,342}]},
        {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,249}]}]},
    offender: [{pid,undefined},
        {id,yaws_server},
        {mfargs,
            {yaws_server,start_link,
                [{env,false,false,false,false,false,false,"default",latin1}]}},
        {restart_type,permanent},
        {shutdown,120000},
        {child_type,worker}]

2020-03-27T08:30:04.145621-05:00 error: 
    crasher:
        initial call: application_master:init/4,
        pid: <0.107.0>,
        registered_name: [],
        exit: {{{shutdown,{failed_to_start_child,yaws_server,{{badmatch,{error,enoent}},
            [{yaws_server,setup_dirs,1,[{file,"yaws_server.erl"},{line,548}]},
            {yaws_server,init2,5,[{file,"yaws_server.erl"},{line,224}]},
            {gen_server,init_it,2,[{file,"gen_server.erl"},{line,374}]},
            {gen_server,init_it,6,[{file,"gen_server.erl"},{line,342}]},
            {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,249}]}]}}},
        {yaws_app,start,[normal,[]]}},
            [{application_master,init,4,[{file,"application_master.erl"},{line,138}]},
            {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,249}]}]},
        ancestors: [<0.106.0>],
        message_queue_len: 1,
        messages: [{'EXIT',<0.108.0>,normal}],
        links: [<0.106.0>,<0.43.0>],
        dictionary: [],
        trap_exit: true,
        status: running,
        heap_size: 987,
        stack_size: 27,
        reductions: 225;
    neighbours:

2020-03-27T08:30:04.147171-05:00 notice:
    application: yaws,
    exited: {{shutdown,{failed_to_start_child,yaws_server,{{badmatch,{error,enoent}},
        [{yaws_server,setup_dirs,1,[{file,"yaws_server.erl"},{line,548}]},
        {yaws_server,init2,5,[{file,"yaws_server.erl"},{line,224}]},
        {gen_server,init_it,2,[{file,"gen_server.erl"},{line,374}]},
        {gen_server,init_it,6,[{file,"gen_server.erl"},{line,342}]},
        {proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},
        {line,249}]}]}}},{yaws_app,start,[normal,[]]}},
    type: temporary

РЕШЕНИЕ: Из справки из приведенного ниже ответа и изучения различных путей Y AWS с использованием find выше я обнаружил, что домашний каталог по умолчанию для меня был `/ var / cache / фрамбезия /». У меня работал следующий ряд команд в оболочке:

os:putenv("YAWSHOME","/var/cache/yaws/").
code:add_patha("/usr/lib/yaws/ebin").
application:start(yaws).

1 Ответ

1 голос
/ 28 марта 2020

Строка 548 исходного кода, показанная в вашем вопросе, не может вернуть {error, enoent}, но строка 548 yaws_server.erl для версии 2.0.6 -

ok = filelib:ensure_dir(Ctl),

, и это то, что возвращает кортеж ошибки , который не соответствует ожидаемому атому ok и вызывает сбой.

Функция filelib:ensure_dir/1 проверяет наличие родительских каталогов своего аргумента, пытаясь создать их, если они не «т. Поэтому для решения этой проблемы необходимо определить путь к аргументу Ctl в приведенном выше коде.

Поскольку идентификатор вашего сервера равен "default", Ctl в этом случае определяется как путь

<HOME>/.yaws/yaws/default/CTL

, где <HOME> берется либо из значения переменной среды YAWSHOME, если оно существует, либо из значения для переменной среды HOME. Убедитесь, что для одной из этих переменных среды задан подходящий путь и что подкаталог .yaws/yaws/default в нем, если он уже существует, имеет соответствующие разрешения для вашего yaws идентификатора пользователя и appname идентификатора группы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...