Пользовательская конфигурация Mochiweb

Я пытался найти ответ в Google, и этот сайт, но, кажется, я не могу найти нигде, поэтому я решил спросить.

Я планирую использовать mochiweb в качестве своего веб-сервера, и я изучал его в течение нескольких дней. Мой вопрос прост:

Где можно поставить или добавить нестандартную конфигурацию? (например, настройка соединения с базой данных), чтобы mochiweb мог загрузить и обработать его?

Спасибо Бромо

1 ответ

Решение

То, что я сделал, было:

  1. Я создаю новую папку внутри priv, называемую: config
  2. Я положил туда свой конфигурационный файл
  3. Я добавляю строку в mochiweb_sup.erl, как показано ниже, чтобы поместить мою конфигурационную папку как часть параметров, которые будут переданы в модуль mochiweb_web.erl:

    web_spec(Mod, Port) ->
        WebConfig = [{ip, {0,0,0,0},
                     {port, Port},
                     %% my code is below
                     {docroot, something_deps:local_path(["priv", "www"])},
                     {custom_config, something_deps:local_path(["priv", "config"])}],
    ...
    
  4. Чем я прочитал этот дополнительный путь из модуля mochiweb_web.erl, как показано ниже

    start(Options) ->
        {DocRoot, Options1} = get_option(docroot, Options),
        %% my code is below
        {ConfigPath, Options2} = get_option(custom_config, Options1),
    
        %% loading my config file
        {ok, FileHandler} = get_config_file(ConfigPath),
    ...
    
  5. Затем я загружаю свой пользовательский файл конфигурации, создавая функцию, как показано ниже:

    get_config_file(ConfigPath) ->
        FileName = "custom_config.txt",
        case file:consult(filename:join([ConfigPath, FileName])) of
            {ok, FileHandler} ->
                {ok, FileHandler};
            {error, Reason} ->
                {error, Reason}
        end.
    

Это оно! Теперь вы можете продолжить обработку этого файла конфигурации, как вам нравится. Если вы хотите обработать конфигурацию, я предлагаю вам обработать ее внутри блока start(Options) и перед выполнением функции mochiweb_http:start, поэтому, если вам нужно передать результат, вы можете передать его как часть аргументов в mochiweb_http:start, но это означает, что вам нужно расширить функцию mochiweb_http:start в модуле mochiweb_http.erl.

Благодарю.

Другие вопросы по тегам