备注:看到了BeepBeep,感觉挺好,正好能看看erlang,就翻译了一下它的readme,算是一个入门。

BeepBeep a simple web application for Erlang

受 rails和merb的启示,BeepBeep是一个支持erlang语言的简单的web应用框架。它遵循“约定胜于配置”的原则--意味着如果在构建你的应用时,遵循代码的结构设计和一些规则,对你来说,是会有好处的,它并不要求有额外的事情处理从url请求到控制器和视图(Controller and Views)的映射。

BeepBeep是构建在MochiWeb和erlyDTL之上的,提供了超快的web服务器,以及用django模板语言来定义模板的能力。

特征

    * 生成新的web应用的脚本(基于mochiweb的方法)
    * 保存你的应用状态的会话服务器(Session Server)
    * 在你的控制器处理之前有一个过滤器(Before filter),比如权限之类
    * 视图使用django模板

起步

   1. 下载代码
   2. 进入beepbeep目录
   3. 运行make
   4. 运行“./script/new_beep.erl 应用名 "目标目录" ”,生成一个新的web应用。

这会创建一个web应用程序需要的一切,包括一个示例控制器(main_controller.erl)。
运行这个示例:

   1. 进入这个你创建的新程序目录
   2. 运行make编译这个新项目
   3. 运行服务: ./start-server.sh
   4. 打开浏览器,访问“http://localhost:8000”

运行原理

你写一个控制器(controller),是用一组方法来处理的,就像:

handle_request(Action, Params)

Action是一个匹配url请求的字符串。Params是一个可选参数的数组,它会被传入给你的controller的变量。
BeepBeep自动处理url请求与控制器和函数(或动作)的映射。举个例子,一个请求"/hello/show",将会映射"hello_controller",激活"handle_request("show", [])"这个函数。

这里是一个例子:

%% hello_controller.erl
-module(hello_controller).

-export([handle_request/2, before_filter/0]).

%% Maps to http://localhost:8000/hello/show
handle_request("show",[]) ->
    {render, "hello/show.html",[{name,"BeepBeep"}]};

%% Maps to http://localhost:8000/hello/feed/2007
handle_request("feed",[Year]) ->
    %% Now Year contains the value 2007
    {render,"hello/feed.html",[{year,Year}]}.

%% Callback filter hook
before_filter(Params) ->
    ok.

从"handle_request",我们返回一个元组,告诉框架使用哪个视图。视图位于views目录下。在我们这个例子,我们的视图位于"hello"

子目录下,有一个文件"show.html"。这里是"show.html"模板内容:

<h2>Hello from {{ name }} </h2>

它会产生:

<h2>Hello from BeepBeep</h2>

在controller中设置的"name"会传入到模板,这个模板系统使用django的格式,是由erlyDTL编写。

这个方法提供了一个controller中的erlang逻辑和模板中的html代码之间清晰的分离。在匹配"handler_request"调用之前,可以用before_filter来检查请求。filter过滤器只是简单的返回原子ok,否则他们应返回请求的响应,诸如{render...}或者{redirect...之类。

更多的信息,要参见文档和包含在源代码中的blog例子。在wiki上有一个简短的入门指南。