読者です 読者をやめる 読者になる 読者になる

備忘録、はじめました。

作業したこと忘れないようにメモっておきます。Medium: https://medium.com/@tkyshm

webmachineの設定ファイルを作る

はじめに

webmachineはErlang製の軽量Webツールキットの一つです。デフォルトだと、webmachineで作るアプリケーションの設定はerlangソース内で記述する形になります。私は設定ファイルを別で分けたかったので今回その作業についてメモします。注意として、webmachineをつかった開発前提で話を進めていきます。

webmachineの設定

webmachineでは[APP_ROOT]/src以下にアプリケーションのソースファイルが置かれています(APP_ROOTはアプリケーションのルートディレクトリ)。通常、そこのディレクトリ以下のappname_sup.erl(appnameは適宜置き換え)の中でwebmachineの設定を行っていきます。今回その設定項目をerlangのconfigファイルで設定できるように書き換えます。手順を書きます。

  1. appname.configをAPP_ROOTの場所に作成する
  2. appname_sup.erlのinit/1の処理を書き換える
  3. start.shの起動コマンドに -config appnameを追記する

以上の3つの手順で設定ファイルを作成、反映させていきます。

1, appname.configの作成

appname.configの中身の一例を以下に載せます。

%% -*- mode: erlang -*-
[{synbook,
  [
   % アクセス許可するIPアドレス
   {ip, "0.0.0.0"},
   % ポート番号
   {port, 8080},
   % ログファイルのディレクトリ
   {log_dir, "priv/log"},
   % dispatchの設定ファイル名
   {dispatch,"dispatch.conf"},
   % 子プロセスの仕様
   {child_spec,
    { 
     permanent,
     5000,
     worker,
     [mochiweb_socket_server]
    }
   }
  ]
 }
].

子プロセスの仕様に関する詳細は
5. スーパバイザ・ビヘイビア — Erlang User's Guide v5.8.1 documentation(日本語)で確認できます。

2, appname_sup.erlのinit/1の処理の書き換え

1,で作成したappname.configにあわせて、erlangのproplistを用いて修正していきます。

%% @spec init([]) -> SupervisorTree
%% @doc supervisor callback.
init([]) ->
    {ok, App} = application:get_application(?MODULE),
    AppConfig = application:get_all_env(App),
    {ok, Dispatch} = dispatch_dir(priv_dir(App), application:get_env(App, dispatch)),
    {ok, ChildSpec} = application:get_env(App, child_spec),
    WebConfig = [ 
                 {ip, proplists:get_value(ip, AppConfig)}, 
                 {port, proplists:get_value(port, AppConfig)}, 
                 {log_dir, proplists:get_value(log_dir, AppConfig)}, 
                 {dispatch, Dispatch}
                ],
    {ok, Web} = append_all_elements({webmachine_mochiweb,{webmachine_mochiweb, start, [WebConfig]}}, tuple_to_list(ChildSpec)),
    Processes = [Web],
    {ok, { {one_for_one, 10, 10}, Processes} }.

3, start.shの起動コマンド修正
#!/bin/sh
cd `dirname $0`
exec erl -pa $PWD/ebin $PWD/deps/*/ebin -boot start_sasl -s folsom  -s reloader -s synbook -config synbook
参考URL
  1. Home · basho/webmachine Wiki · GitHub
  2. Erlang -- config

プログラミングErlang

プログラミングErlang