4

Erlang と N2O は初めてですが、Python Web 開発の経験があります。AVZ を使用する代わりに、アプリケーションで電子メール アドレス (電子メール - パスワード) による認証を作成したいと考えています。このコードでサインアップページを作成しました (他のコードは n2o_sample です)。しかし、ユーザーを配置する代わりに、kvs{error, no_container} があります

-module(signup_page).
-compile(export_all).
-include_lib("n2o/include/wf.hrl").
-include_lib("n2o_sample/include/users.hrl").

 title() -> [ <<"Sign Up Page">> ].
 main() -> #dtl{file = "login", app = n2o_sample,
                bindings = [{title,title()},{body,body()}]}.

 body() ->
   [ #span{id=display}, #br{},
     #span{body="Email: "}, #textbox{id=user}, #br{},
     #span{body="Password: "}, #password{id=pass}, #br{},
     #span{body="Confirm Password"}, #password{id=confirm}, #br{},
     #button{id=signup, body="Sign Up",
             postback=signup,source=[user,pass,confirm]}].

 event(signup) ->
   User = wf:q(user), Password = wf:q(pass), Confirm = wf:q(confirm),
   U = kvs:get(user, User, undefined),
   case U of
     {ok, undefined} ->
       case Password of
            undefined -> wf:update(display, <<"No pass">>);
            Confirm -> Status = kvs:put(#user{id=User}), 
                       % -> {error, no_container}
                       io:format("~w~n", [Status]);
            B -> io:format("~w~n", [B]) end;
      A ->  io:format("~w~n", [A]),
            wf:update(display, <<"Already registered!">>) end;

 event(_) -> [].
4

1 に答える 1

9

あなたはすべてを正しく行います。

問題は、基本的に KVS の構成に関するものです。KVS を適切に機能させるには、いくつかの手順を実行する必要があります。

1. kvs を rebar.config に入れる

    {kvs, ".*", {git, "git://github.com/synrc/kvs", {tag,"1.5.0"}}},

凍結されたタグ バージョンを使用します。たとえば、「1.5.0」が最新の安定版です。

2. sys.config で KVS アプリケーションを構成する

    {n2o, [{port,8000},{transition_port, 8000}]},
    {kvs, [{dba,store_mnesia},
           {schema, [kvs_user, kvs_acl, kvs_feed, kvs_subscription ]} ]},

N2Oの設定例を入れて、どこに配置する必要があるかを確認しました。

3. 「make console」を最初に起動した直後に、Erlang シェルで DB を初期化する必要があります。

1> kvs:join().

これにより、MNESIA テーブルがインスタンス化されます。

4. その後、Erlang シェルで問題のチェックを行ってください。

2> rr(kvs_user).

最初に kvs_user モジュールからすべてのレコードをロードします。次に、チェックを実行します。

3> kvs:put(#user{id="maxim@synrc.com"}).
于 2014-06-21T12:16:45.367 に答える