gpt4 book ai didi

erlang - 雅司样本文件

转载 作者:行者123 更新时间:2023-12-01 22:41:08 28 4
gpt4 key购买 nike

我目前正在尝试了解和查找使用 YAWS 的网页的案例研究。除了源附带的默认页面之外,有人知道我能找到的任何示例页面吗?

谢谢,

最佳答案

Building Web Applications with Erlang也许是一本值得阅读的好书,但它假定读者已经对设置环境和基本的雅司病思想了解很多。

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

我总结了一些偏航的基础知识如下。我在 Ubuntu 上运行雅司病。

设置

安装

sudo apt-get install yawssudo 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>

需要考虑的事情

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

使用 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;
}
}

服务器测试

您可以使用 sudo server yaws start 启动 yaws 服务器,并使用 ps aux | 检查 yaws 是否正在运行grep 雅司病。您可以使用 sudo update-rc.d -f yaws enable 使 yaws 服务器在启动时启动。

您还可以使用 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,

yaws 服务器正在运行,因此您应该使用 sudo service yaws stop 停止 yaws 服务器,然后再次运行 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>

你可以运行很多命令,比如你可以用code:get_path()查看yaws找到erlang beam代码的路径。

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",

例子

静态文件

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

.yaws 文件

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

静态雅司文件

你可以把html代码放在yaws文件里。

<html>

<h1>Hello world </h1>

</html>

erlang代码

你也可以放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>

当 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]))}]}.

然后,将其编译成 beam 二进制文件。

erlc myappmod.erl

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

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

有了这个应用程序模式,有了这个 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"

我认为这些信息足够了,可以开始阅读其他文档了。

关于erlang - 雅司样本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13211875/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com