雅司病样本文件

cgv*_*val 1 erlang yaws

我目前正在尝试使用YAWS了解并查找网页案例研究.除了源代码附带的默认代码之外,任何人都知道我能找到的任何样本页面吗?

谢谢,

pro*_*eek 7

使用Erlang构建Web应用程序可能是一本很好的书,但它假设读者已经对设置环境和基本的偏航想法有了很多了解.

所以,你可以从http://yaws.hyber.org/simple.yaws开始.

我总结了一些关于雅司病的基本原理如下.我在Ubuntu上运行雅司病.

建立

安装

sudo apt-get install yaws并且sudo apt-get install erlang将安装Erlang和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>
Run Code Online (Sandbox Code Playgroud)

要考虑的事情

在Ubuntu中,目录只能由root访问,因此您应该运行sudo ..或运行sudo chmod g+rw ....在后者中,您应该将您的帐户设置为root和ssl-cert组sudo usermod -a -G ssl-cert ubuntu.

使用Nginx网络服务器

你可以使用Nginx作为baacke-end,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;
        } 
}
Run Code Online (Sandbox Code Playgroud)

服务器测试

您可以启动yaws服务器sudo server yaws start,并检查正在运行的偏航ps aux | grep yaws.你可以让yaws服务器在启动时启动sudo update-rc.d -f yaws enable.

您还可以使用yaws -i命令以交互方式运行和测试yaws服务器.在这种情况下,如果您看到错误消息:

=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,
Run Code Online (Sandbox Code Playgroud)

yaws服务器正在运行,因此您应该停止yaws服务器sudo service yaws stop,然后yaws -i再次运行.然后,如果按下回车键,您将看到提示.

=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> 
Run Code Online (Sandbox Code Playgroud)

您可以运行许多命令,例如,您可以检查偏航找到erlang梁代码的路径 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",
Run Code Online (Sandbox Code Playgroud)

例子

静态文件

在配置中,您/home/ubuntu/webapp/yaws/simple使用端口8083访问docroot ,因此您可以访问静态文件:即 http://...:8083/hello.html.

.yaws文件

如果文件具有.yaws扩展名,则yaws会动态地将其编译为erlang代码,并将源代码存储在其中/var/cache/yaws/.yaws/yaws/debian_yaws/.

静态偏航文件

您可以将html代码放在yaws文件中.

<html>

<h1>Hello world </h1>

</html>
Run Code Online (Sandbox Code Playgroud)

二郎代码

你也可以输入erlang代码.检查这out(Arg) ->是要呈现为HTML的函数.

<html>
<h1> Yesssssss </h1>

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

</html>
Run Code Online (Sandbox Code Playgroud)

应用模式

你可以教yaws来调用erlang代码.使用此配置:

<server localhost>
    port = 8083
    listen = 0.0.0.0
    docroot = /home/ubuntu/webapp/yaws/simple
    appmods = <pathelem, myappmod>
</server>
Run Code Online (Sandbox Code Playgroud)

当Yaws在URL中看到pathelem时,它将调用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]))}]}.
Run Code Online (Sandbox Code Playgroud)

然后,将其编译成梁二进制.

erlc myappmod.erl
Run Code Online (Sandbox Code Playgroud)

在交互模式中,作为"." 已经在路径中,但在服务器模式或守护进程模式下,bean应位于搜索路径之一.在/etc/yaws/yaws.conf,您可以更新ebin目录.

ebin_dir = /usr/lib/yaws/custom/ebin
Run Code Online (Sandbox Code Playgroud)

使用此appmode,使用此URL.

http://yaws.example.com:8083/zap/pathelem/foo/bar/x.pdf?a=b
Run Code Online (Sandbox Code Playgroud)

结果将是:

A#arg.appmoddata = "foo/bar/x.pdf"
A#arg.appmod_prepath = "/zap/"
A#arg.querydata = "a=b"
Run Code Online (Sandbox Code Playgroud)

我认为这足够的信息可以开始阅读其他的doucments.