Vanilla高性能 Web 應(yīng)用開發(fā)框架
香草/Vanilla
香草/Vanilla是一個(gè)基于Openresty實(shí)現(xiàn)的高性能Web應(yīng)用開發(fā)框架.
郵件列表
-
vanilla-en [email protected]
-
vanilla-devel [email protected]
-
vanilla中文郵件列表 [email protected]
安裝
目前Vanilla支持兩種安裝方式
-
Make(推薦使用此種)
-
Luarocks
make install安裝須知
Vanilla 支持的選項(xiàng)都提供了默認(rèn)值,如果你的環(huán)境與默認(rèn)值不一樣,請configure時(shí)指定成你自己的。
特別注意選項(xiàng)--openresty-path,默認(rèn)為/usr/local/openresty,請確保設(shè)置正確。
可以在源碼目錄下執(zhí)行configure --help來查看安裝選項(xiàng)的使用方法。
下面是一個(gè)簡單的安裝示例:
./configure --prefix=/usr/local/vanilla --openresty-path=/usr/local/openresty make install (如果沒有C模塊【目前支持lua-filesystem】,則不需要make,直接make install)
luarocks install安裝須知
可以使用luarocks安裝vanilla,但是下面三點(diǎn)請注意 1. Luarocks應(yīng)該基于lua5.1.x的版本安裝,因?yàn)槠渌姹綥ua和Luajit的ABI存在兼容性問題。 2. Luarocks安裝的Vanilla在nginx.conf文件的NGX_PATH變量不可用。 3. 請確保nginx命令可以直接運(yùn)行(nginx命令在你的環(huán)境變量中)
Vanilla 使用
Vanilla命令
Vanilla 目前提供了兩個(gè)命令vanilla,和vanilla-console
-
vanilla用來初始化應(yīng)用骨架,停啟服務(wù)(添加--trace參數(shù)可以看到執(zhí)行的命令)
-
vanilla-console是一個(gè)交互式命令行,主要提供一種方便學(xué)習(xí)Lua入門的工具,可以使用一些vanilla開發(fā)環(huán)境下的包,比如table輸出的lprint_r方法。
命令行執(zhí)行vanilla就能清晰看到vanilla命令提供的選項(xiàng)。
vanilla Vanilla v0.1.0-rc3, A MVC web framework for Lua powered by OpenResty. Usage: vanilla COMMAND [ARGS] [OPTIONS] The available vanilla commands are: new [name] Create a new Vanilla application start Starts the Vanilla server stop Stops the Vanilla server Options: --trace Shows additional logs
創(chuàng)建應(yīng)用
vanilla new app_name cd app_name vanilla start [--trace] -- 默認(rèn)運(yùn)行在development環(huán)境 ## 在linux的bash環(huán)境下: VA_ENV=production vanilla start [--trace] -- 運(yùn)行在生產(chǎn)環(huán)境 ## 在BSD等tcsh環(huán)境下: setenv VA_ENV production;vanilla start [--trace] -- 運(yùn)行在生產(chǎn)環(huán)境
代碼目錄結(jié)構(gòu)
? /Users/zj-git/app_name/ tree ./ ./ ├── application(應(yīng)用代碼主體目錄) │ ├── bootstrap.lua(應(yīng)用初始化 / 可選<以下未標(biāo)可選為必選>) │ ├── controllers(應(yīng)用業(yè)務(wù)代碼主體目錄) │ │ ├── error.lua(應(yīng)用業(yè)務(wù)錯(cuò)誤處理,處理本路徑下相應(yīng)業(yè)務(wù)報(bào)錯(cuò)) │ │ └── index.lua(hello world示例) │ ├── library(應(yīng)用本地類包) │ ├── models(應(yīng)用數(shù)據(jù)處理類) │ │ ├── dao(數(shù)據(jù)層業(yè)務(wù)處理) │ │ │ └── table.lua │ │ └── service(服務(wù)化業(yè)務(wù)處理,對DAO的再次封裝) │ │ └── user.lua │ ├── nginx(*Openresty所封裝Nginx請求處理各Phase) │ │ └── init.lua(*init_by_lua示例) │ ├── plugins(插件目錄) │ └── views(視圖層,與controllers一一對應(yīng)) │ ├── error(錯(cuò)誤模板) │ │ └── error.html │ └── index(index controller模板) │ └── index.html ├── config(應(yīng)用配置目錄) │ ├── application.lua(應(yīng)用基礎(chǔ)配置 / 路由器、初始化等設(shè)置) │ ├── errors.lua(應(yīng)用錯(cuò)誤信息配置) │ ├── nginx.conf(nginx配置文件模板) │ ├── nginx.lua(服務(wù)各種運(yùn)行環(huán)境配置 / 是否開啟lua_code_cache等) │ ├── waf-regs(應(yīng)用防火墻規(guī)則配置目錄) │ │ ├── args │ │ ├── cookie │ │ ├── post │ │ ├── url │ │ ├── user-agent │ │ └── whiteurl │ └── waf.lua(服務(wù)防火墻配置) ├── logs(日志目錄) │ └── hack(攻擊日志目錄 / 保持可寫權(quán)限) ├── pub(應(yīng)用Nginx配置根路徑) └── index.lua(應(yīng)用請求入口)
業(yè)務(wù)代碼示例 IndexController
local IndexController = {}
function IndexController:index()
local view = self:getView()
local p = {}
p['vanilla'] = 'Welcome To Vanilla...'
p['zhoujing'] = 'Power by Openresty'
view:assign(p)
return view:display()
end
return IndexController
模板示例 views/index/index.html
<!DOCTYPE html> <html> <body> <img src="http://m1.sinaimg.cn/maxwidth.300/m1.sinaimg.cn/120d7329960e19cf073f264751e8d959_2043_2241.png"> <h1><a href = 'https://github.com/idevz/vanilla'>{{vanilla}}</a></h1><h5>{{zhoujing}}</h5> </body> </html>
為什么需要Vanilla
回答這個(gè)問題,我們只需要看清楚Openresty和Vanilla各自做了什么即可。
Openresty
-
提供了處理HTTP請求的全套整體解決方案
-
給Nginx模塊開發(fā)開辟了一條全新的道路,我們可以使用Lua來處理Web請求
-
形成了一個(gè)日趨完善的生態(tài),這個(gè)生態(tài)涵蓋了高性能Web服務(wù)方方面面
Vanilla
-
使復(fù)雜的Nginx配置對Web業(yè)務(wù)開發(fā)者更透明化
-
開發(fā)者不再需要了解Openresty的實(shí)現(xiàn)細(xì)節(jié),而更關(guān)注業(yè)務(wù)本身
-
實(shí)現(xiàn)了Web開發(fā)常規(guī)的調(diào)試,錯(cuò)誤處理,異常捕獲
-
實(shí)現(xiàn)了請求的完整處理流程和插件機(jī)制,支持路由協(xié)議、模板引擎的配置化
-
整合、封裝了一系列Web開發(fā)常用的工具集、類庫(cookie、應(yīng)用防火墻等)
-
實(shí)現(xiàn)了自動化、配置化的Nginx指令集管理
-
更合理的利用Openresty封裝的8個(gè)處理請求Phase
-
支持不同運(yùn)行環(huán)境(開發(fā)、測試、上線)服務(wù)的自動化配置和運(yùn)行管理
-
功能使用方便易于擴(kuò)展
-
基于Openresty開發(fā),具備Openresty一切優(yōu)良特性
