2

私は現在、YAWS を使用して Web ページのケーススタディを理解し、見つけようとしています。ソースに付属しているデフォルトのものとは別に、私が見つけることができるサンプルページを知っている人はいますか?

ありがとう、

4

1 に答える 1

7

Building Web Applications with Erlangは読むのに良い本かもしれませんが、読者がセットアップ環境と基本的な yaws のアイデアについて既に多くのことを知っていることを前提としています。

したがって、 http://yaws.hyber.org/simple.yawsから開始できます。

ヨーの基礎のいくつかを次のように要約します。Ubuntuでヨーを実行します。

設定

インストール

sudo apt-get install yawsそして、sudo apt-get install erlangerlang と yawk をインストールします。

構成

/etc/yaws/yaws.confメインの設定ファイルです。ロードさconf.d/localhost.confれるので、Apache や Nginx と同じように独自の構成を追加できます。これは 8083 ポートを使用する例です。

<server localhost>
    port = 8083
    listen = 0.0.0.0
    docroot = /home/ubuntu/webapp/yaws/simple
</server>

考慮事項

Ubuntu では、ディレクトリは root のみがアクセスできるため、実行するsudo ..か実行する必要がありますsudo chmod g+rw ...。後者では、アカウントを root として作成し、ssl-cert グループを で作成する必要がありますsudo usermod -a -G ssl-cert ubuntu

Nginx ウェブサーバーの操作

nginx をリバース プロキシ サーバーとして使用し、バックエンドとして Nginx を使用できます。これは、/etc/nginx/site-enabled (対応する /etc/ngix/site-available にリンクされている) ディレクトリの構成例です。

upstream yaws {
        server 127.0.0.1:8083;
        keepalive 8;
}

# the nginx server instance
server {
        listen 0.0.0.0:80;
        server_name yaws.example.com;
        access_log /var/log/yaws/access_yaws.log;
        error_log /var/log/yaws/error_yaws.log;

        location / {
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $http_host;
            proxy_set_header X-NginX-Proxy true;

            proxy_pass http://yaws/;
            proxy_redirect off;
        }

        location /excluded {
            return 403;
        } 
}

サーバーテスト

で yaws サーバーを起動しsudo server yaws start、 で yaws が実行されていることを確認できますps aux | grep yaws。を使用して、起動時に yaws サーバーを起動することができますsudo update-rc.d -f yaws enable

コマンドを使用して対話的に yaws サーバーを実行およびテストすることもできますyaws -i。この場合、次のエラー メッセージが表示されます。

=ERROR REPORT==== 10-Nov-2015::09:44:33 ===
Yaws: Failed to listen 0.0.0.0:8443  : {error,eaddrinuse}

=ERROR REPORT==== 10-Nov-2015::09:44:33 ===
Can't listen to socket: {error,eaddrinuse} 
=INFO REPORT==== 10-Nov-2015::09:44:33 ===
    application: yaws
    exited: {{shutdown,
                 {failed_to_start_child,yaws_server,
                     {badbind,
                         [{yaws_server,start_group,2,
                              [{file,"yaws_server.erl"},{line,264}]},
                          {lists,filtermap,2,[{file,"lists.erl"},{line,1302}]},
                          {yaws_server,init2,5,

yaws サーバーが実行されているため、 で yaws サーバーを停止し、再度sudo service yaws stop実行する必要がありますyaws -i。Enterキーを押すと、プロンプトが表示されます。

=INFO REPORT==== 10-Nov-2015::09:45:42 ===
Yaws: Listening to 0.0.0.0:8443 for <1> virtual servers:
 - https://localhost:8443 under /usr/share/yaws

=INFO REPORT==== 10-Nov-2015::09:45:42 ===
Yaws: Listening to 0.0.0.0:8083 for <1> virtual servers:
 - http://localhost:8083 under /home/ubuntu/webapp/yaws/simple

1> 

多くのコマンドを実行できます。たとえば、yaws がアーラン ビーム コードを見つけるパスを確認できます。code:get_path().

1> code:get_path().
["/usr/lib/yaws/ebin",".",
 "/usr/lib/erlang/lib/kernel-2.16.4/ebin",
 "/usr/lib/erlang/lib/stdlib-1.19.4/ebin",
 "/usr/lib/erlang/lib/xmerl-1.3.5/ebin",

静的ファイル

構成では、docroot/home/ubuntu/webapp/yaws/simpleがポート 8083 でアクセスされるため、静的ファイルにアクセスできます http://...:8083/hello.html

.yaws ファイル

ファイルの拡張子が .yaws の場合、yaws はそれを動的に erlang コードにコンパイルし、ソース コードを/var/cache/yaws/.yaws/yaws/debian_yaws/.

静的ヨー ファイル

html コードを yaws ファイルに入れることができます。

<html>

<h1>Hello world </h1>

</html>

アーランコード

erlang コードを配置することもできます。out(Arg) ->が HTML にレンダリングする関数であることを確認します。

<html>
<h1> Yesssssss </h1>

<erl>
out(Arg) -> {html, "<h2> Hello again </h2>"}.
</erl>

</html>

アプリモード

yaws に erlang コードを呼び出すように教えることができます。この構成では:

<server localhost>
    port = 8083
    listen = 0.0.0.0
    docroot = /home/ubuntu/webapp/yaws/simple
    appmods = <pathelem, myappmod>
</server>

URL に pathelem がある場合、Yaws は myappmod メソッドを呼び出します。アプリ モードの場合は、myappmod モジュールを作成する必要があります。

-module(myappmod).
-author('klacke@bluetail.com').

-include("/usr/lib/yaws/include/yaws_api.hrl").
-compile(export_all).

box(Str) ->
    {'div',[{class,"box"}],
     {pre,[],Str}}.

out(A) ->
    {ehtml,
     [{p,[],
       box(io_lib:format("A#arg.appmoddata = ~p~n"
                         "A#arg.appmod_prepath = ~p~n"
                         "A#arg.querydata = ~p~n",
                         [A#arg.appmoddata,
                          A#arg.appmod_prepath,
                          A#arg.querydata]))}]}.

次に、それをビーム バイナリにコンパイルします。

erlc myappmod.erl

対話モードでは、「.」として すでにパスに含まれていますが、サーバー モードまたはデーモン モードでは、Bean は検索パスの 1 つにある必要があります。では/etc/yaws/yaws.conf、ebin ディレクトリを更新できます。

ebin_dir = /usr/lib/yaws/custom/ebin

この appmode で、この URL で。

http://yaws.example.com:8083/zap/pathelem/foo/bar/x.pdf?a=b

結果は次のようになります。

A#arg.appmoddata = "foo/bar/x.pdf"
A#arg.appmod_prepath = "/zap/"
A#arg.querydata = "a=b"

他のドキュメントを読み始めるには、これで十分な情報だと思います。

于 2015-11-10T16:01:55.043 に答える