ChicagoBoss简介

翻译人:李罗琦

(ChicagoBoss)[http://www.chicagoboss.org] 由 Evan Miller创作,使用erlang/OTP的开发者们可以通过它提供的一个类似于Ruby On Rail web框架的MVC模式去开发标准的web应用。
erlang和Java一样属于编译型语言,一个erlang的源文件会被编译成一个beam文件,beam文件可以在erlang的虚拟机里面执行就像Java编译后的字节代码在Java虚拟机JVM里面执行一样。
在这个文章的系列中,我会和大家聊一聊
ChicagoBoss。
我假定大家都了解过erlang或是掌握了一些功能性开发的知识,如果不是的话我建议大家可以去访问 learnyousomeerlang.org学习一下。

一步步来

安装erlang

系统版本:Linux Ubuntu 14.04,我通常会卸载掉预装的erlang 运行时然后去使用它的源码内核手工安装。
shell中按照下面的执行

> cd ~
> mkdir bin
> cd bin
> sudo apt-get remove erlang
> sudo apt-get build-dep erlang
> curl -O[https://raw.githubusercontent.com/spawngrid/kerl/master/kerl](https://raw.githubusercontent.com/spawngrid/kerl/master/kerl)
> chmod u+x kerl
> echo "" >> ~/.kerlrc
> ./kerl update releases
> ./kerl build 17.5 17.5
> ./kerl install 17.5 ~/bin/lang/erlang/17.5
> echo "source ~/bin/lang/erlang/17.5/activate" >> ~/.profile
> echo "export PATH=$PATH:$HOME/bin:." >> ~/.profile

上述步骤完成后,你的机器上面就有了一个可以工作的erlang运行时,你只需要在shell中输入erl就能获取到erlang REPL

安装ChicagoBoss

还是一样在shell中操作

>sudo apt-get install git
>mkdir workspace
>cd workspace
>git clone [http://github.com/ChicagoBoss/ChicagoBoss.git](http://github.com/ChicagoBoss/ChicagoBoss.git) -b v0.8.13

创建我们第一个ChicagoBoss(CB)项目并开发

还是一样子,shell命令

>cd
>cd workspace/ChicagoBoss
>make app PROJECT=first
>cd ../first
>./init-dev.sh

CB 应用源文件树结构

first/
├── boss.config
├── init-dev.sh
├── init.sh
├── deps
│   ├── boss
│   ├── boss_db
│   └── ...
├── log
│   ├── console.log
│   ├── crash.log
│   └── error.log
├── Makefile
├── priv
│   ├── first.routes
│   ├── init
│   ├── rebar
│   └── static
├── README.md
├── rebar
├── rebar.cmd
├── rebar.config
├── src
│   ├── controller
│   ├── first.app.src
│   ├── mail
│   ├── view
│   └── websocket
└── start-server.bat
  • boss.config是应用程序的配置文件.
  • init-dev.sh 启动应用的开发模式,重载和重编译。.
  • init.sh start your app 启动应用程序。
  • deps, 这里列出了你所有的依赖程序。
  • log, 程序日志文件。
  • priv/first.routes , 自定义路由信息配置文件
  • priv/init , 初始化脚本
  • priv/static, 静态文件
  • src/controller, 程序的controller控制器所在目录.
  • src/mail, 收发邮件controller控制器所在目录
  • src/view/<controller_name>/<action_name>.html 视图文件,按照控制器名称/动作名称来命名。
  • src/websocket, web套接字controller所在目录

选择哪个IDE?

我个人建议使用Emacs,有些人呢会使用Sublime Text, some Erlide或是VIM,使用哪个完全取决于你,任意一个文本编辑器就可以。

我的第一个controller/view 控制器和视图

按照惯例,一个controller的命名方式应该是这样:

/src/__controller.erl

比如说,我想创建一个名字是index的controller同时包含一个名为index的action,
当在浏览器中访问http://localhost:8001/index/index的时候会出现一行hello world的文字。
编辑
first/src/controller/first_index_controller.erl 就像下面这样:

-module(first_index_controller, [Req, SessionId]).
-export([index/3]).
index(‘GET‘, [], _ReqCtx) ->
{ok, [{msg, "Hello World!!!"}]}.

对应响应的视图文件是:
<app_name>/src/view/<controller_name>/<action_name>.<tpl_extension>

针对index controller里面的index action 视图文件是:
first/src/view/index/index.html
按照下面进行编辑:

{{ msg }}

然后
shell中通过curl命令访问:

curl -X GET[http://localhost:8001/index/index](http://localhost:8001/index/index)

action:

CB中的一个action就是一个包含2到三个参数的方法。
第一个参数是用来匹配request请求的方法, 比如:‘GET‘, ‘POST‘, ‘PUT‘, ‘DELETE‘, ‘HEAD‘ ...
第二个参数是url的token令牌信息。
第三个参数是可选的:请求的上下文信息,CB会提供给action一个请求的上下文信息,context其实是一个键值对列表,其中的
键值对可以在一些boss_filter过滤器中的_before方法中被修改。
下面的示例给出一个带context上下文的action

-module(first_index_controller, [Req, SessionId]).
-export([index/3]).
index(‘GET‘, [], ReqCtx) ->
lager:info("Request Context: ~p",[ReqCtx]),
{ok, [{msg, "Hello World!!!"}]}.

默认action

什么是默认action,当从请求的url中无法判断出来要执行的是哪个action的时候会被转发到默认的action,如果你需要提供这样的功能你可以
在你的controller里面使用属性 *-default_action(<action_name>)。而如果你的CB程序里面没有提供默认的action,则会跳转到404页面。

举个例子
在index controller里面这样定义:

curl -X GET[http://localhost:8001/index](http://localhost:8001/index)

then http://loaclhost:8001/index will execute the default action index.

-module(first_index_controller, [Req, SessionId]).
-export([index/3]).
-default_action(index).
index(‘GET‘, [], _ReqCtx) ->
{ok, [{msg, "Hello World!!!"}]}.

通过curl命令访问

curl -X GET[http://localhost:8001/index](http://localhost:8001/index)

这个时候 http://loaclhost:8001/index 机会跳转到默认的名为index的action里面执行,页面就会出现一行文字:

hello world.

时间: 2024-10-21 02:22:09

ChicagoBoss简介的相关文章

Android网络通讯简介

网络通信应该包含三部分的内容:发送方.接收方.协议栈.发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的契约.按照服务类型,网络通信可分为面向连接和无连接的方式.面向连接是在通信前建立通信链路,而通信结束后释放该链路.无连接的方式则不需要在通信前建立通信连接,这种方式不保证传输的质量. Android提供了多种网络通信的方式,如Java中提供的网络编程,在Android中都提供了支持.Android中常用的网络编程方式如下: 针对TCP/IP协议的Socket和ServerSock

微信红包的架构设计简介

@来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.. 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低. 实时性:为什么明明抢到红包,点开后发现没有? 答:2014年的红包一点开就知道金额,分两次操作

JSON 简介

ylbtech-JSON: JSON 简介 JSON:JavaScript Object Notation(JavaScript 对象表示法) JSON是存储和交换文本信息的语法,类似 XML. JSON 比 XML 更小.更快.更易解析. JSON 实例 { "employee":[ {"firstName":"John","lastName":"Doe"}, {"firstName"

Docker简介

Docker简介 什么是Docker: 正所谓Docker的英文本意为"搬运工",所以在我们的世界里,可以理解为Docker搬运的是装满任意类型的APP的集装箱,开发者可以通过Docker将APP变成一种标准化的.可移动植的.自动管理的组件.它用一种新的方式实现了轻量级的虚拟机,专业术语成为应用容器(Application Container) Docker的优势: 1.利用率高 ·Docker对系统资源的利用率很高,一台主机可以同时运行数千个Docker容器 2.可以快速的交付应用程

kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状态信息是如何保存的? 4.partitions设计的目的的根本原因是什么? 一.入门 1.简介 Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现.k

Quartz.NET简介及入门指南

Quartz.NET简介 Quartz.NET是一个功能完备的开源调度系统,从最小的应用到大规模的企业系统皆可适用. Quartz.NET是一个纯净的用C#语言编写的.NET类库,是对非常流行的JAVA开源调度框架 Quartz 的移植. 入门指南 本入门指南包括以下内容: 下载 Quartz.NET 安装 Quartz.NET 根据你的特定项目配置 Quartz 启动一个样例程序 下载和安装 你可以下载 zip 文件或使用 Nuget 程序包.Nuget 程序包只包含 Quartz.NET 运

ASP.Net简介、IIS服务器和Repeater重复器

简介:ASP.NET - 制作网站应用程序的技术 WebForm -出来时间比较早,敏捷.便捷开发,封装一些控件,慢慢发现一些控件做的挺好,真正使用没有那么敏捷 MVC -出来时间比较晚 什么东西? winform 界面 - 后台 - 数据库 共同组合出来的程序:ASP.NET 界面(HTML+CSS+JS) - 后台 - 数据库 运行机制:winform - 程序是安装在用户的电脑上,程序是运行在用户电脑上的.net Framework框架上的 ASP.NET - 通过浏览器向服务器发送请求,

CloudFoundry in 1 Box简介:PCF-Dev篇

在<CloudFoundry in 1 Box简介:Bosh-lite篇>我们介绍了Bosh-lite的架构和部署.在本篇中,我们将详细描述另一个CloudFoundry in 1 Box解决方案PCF-Dev. 1PCF-dev简介 PCF是Pivotal发行的Cloud Foundry商业版,PCF-Dev原名MicroPCF,是Pivotal为PCF的应用开发人员准备的一款App单虚拟机版的CloudFoundry.但是,麻雀虽小,五脏俱全.PCF-Dev虽然可以在仅仅一台虚拟式上即可运

1、elasticsearch简介

1.elasticsearch简介 中文帮助文档地址:http://es.xiaoleilu.com/ • Elasticsearch是一个基于Lucene的实时的分布式搜索和分析引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便.基于RESTful接口. – 普通请求是...get?a=1 – rest请求....get/a/1 • Elasticsearch的用户 – GitHub,Wikipedia,ebay等... • ES VS Solr – 接口 • 类似web