MoonScript如何使用RESTY-HTTP
作者:糖果
在OpenResty中发起HTTP请求,一般情况下,有两种方式:
1.通过内部Proxy。
2.使用RESTY-HTTP库发起访问。
Lapis使用的是interal proxy,之前文章有提到,下面提到的是RESTY-HTTP的MoonScript调用
实现。
RESTY-HTTP安装
实际RESTY-HTTP的主要实现就是两个lua文件, http_headers.lua和http.lua这两个文件。
将文件复制到/usr/local/openresty/lualib/resty下即可使用,再引用http.lua时注意一下
的是Lapis也有一个同名文件,需要注意一下冲突。
MoonScript代码:
http = require "resty.http"
httpc = http.new()
res, err = httpc\request_uri("http://www.baidu.com")
if res.status == ngx.HTTP_OK
return res.body
else
return "nil"
LUA代码:
[ ...
LUA遍历所有Table变量元素与cjson.null的意义
作者:糖果
Lapis使用JSON解析的代层库就是CJSON。
遍历Table变量的所有元素。
util.moon
json_encodable = (obj, seen={}) ->
switch type obj
when "table"
unless seen[obj]
seen[obj] = true
{ k, json_encodable(v) for k,v in pairs(obj) when type(k) == "string" or type(k) == "number" }
when "function", "userdata", "thread"
nil
else
obj
to_json = (obj) -> jso ...
MoonScript调用LUA-CJSON
作者:糖果
Lapis的util库有对cjson封装,而我们想更直接的调用CJSON的方法,而不想依赖的封装。
我们首先实现一个MoonScript写文件的代码:
写文件:
write_data = (var, rule)->
path = "/home/xxx"
file = io.open(path,"aw")
if file==nil then
return
ret = file\write(rule)
file\close()
return(t)
访问接口:
restyhttp = require "resty.http"
httpc = restyhttp.new()
res, err = httpc\request_uri("http://0.0.0.0/getjson")
jsonbody = ""
if res.status == ngx.HTTP_OK
jsonbody = res.body
else
jsonbody = nil
对JSON数据DECODE:
write_da ...
关于Lua的LazyTable的实现
作者:糖果
LazyTable源码
local ngx_req = {
headers = function()
return "testcase"
end,
method = function()
return "GET"
end,
}
local lazy_tbl
lazy_tbl = function(tbl, index)
return setmetatable(tbl, {
__index = function(self, key)
for k,v in pairs(index) do
print(k, v)
end
--print(key)
for k,v in pairs(self) do
print(k, v)
end
local fn = index[key]
if fn then
do
...
MoonScript实现选择排序
作者:糖果
LUA代码:
list = {1,5,3,2,9,3,6}
len=#list
for i=1,len
max = list[i]
for j=i+1, len do
if list[j]>max then
tmp=list[j]
list[j]=max
list[i]=tmp
max=tmp
for item in *list
print(item)
MoonScript代码
local list = {
1,
5,
3,
2,
9,
3,
6
}
local len = #list
for i = 1, len do
local max = list[i]
for j = i + 1, len do
if list[j] > max then
local tmp = list[j]
list[j] = max
list[i] = tmp
...
HiLua框架与MoonScript库的交互过程
作者:糖果
上一篇是用.so作为框架的库,这是接上回,用MoonScript实现库。
在HiLua工程中,创建/libs/moon目录,建立MoonScript库代码,如下:
HiLog.moon
class HiLog
@log: =>
print("HiLog...")
return "HiLog..."
HiLog.lua
local HiLog
do
local _class_0
local _base_0 = { }
_base_0.__index = _base_0
_class_0 = setmetatable({
__init = function() end,
__base = _base_0,
__name = "HiLog"
}, {
__index = _base_0,
__call = function(cls, ...)
local _self_0 = setmetatable({ ...
Django Guide
给Django做一个索引。
Form
http://www.djangobook.com/en/2.0/chapter07.html
打字少,功能实现快。
开发备忘录
1.创建空工程
django-admin.py startproject djproject
2.创建空应用
python manage.py startapp jobs
3.查看数据库表结构
python manage.py sql jobs
4.运行服务
python manage.py runserver
5.同步数据库变更
python manage.py schemamigration youappname --initial
python manage.py syncdb
python manage.py convert_to_south youappname
python manage.py schemamigration youappname --auto
python manage.py migrate youappnam
这个用到了south,一定程度解决修改表结构的痛苦,但是还有。
6.运行本地服务 ...
MoonScript与ElasticSearch客户端
作者:糖果
从Github上看,有一位叫做Dhaval Kapil老师完成了ElasticSearch for Lua的工作,另一位来自阿根廷的叫做Cristian Haunsen的老师,完成了ElasticSearch for Lapis的客户端程序写作工作,dhavalkapil还有一个博客可以访问:dhavalkapil.com
这次实验的目标,是测试一下本地直接运行ES for Lua,然后在Lapis中访问ES,我们的日志在ES,可以用Lua,也可以用Python完成ES的访问工作, Python没有问题,Lua就看这个实验了。
测试代码,如下:
local elasticsearch = require "elasticsearch"
local client = elasticsearch.client{
hosts = {
{ -- Ignoring any of the following hosts parameters is allowed.
-- The default shall be set ...
MoonScript与Simple.HTTP
作者:糖果
MoonScript调用Lapis的Simple.http,其实调用的就是OpenResty的http的接口。
candylab.moon
http = require "lapis.nginx.http"
body, status_code, headers = http.simple {
url: 'http://moonscript.cn'
method: "GET"
headers: {}
}
candylab.lua
local http = require("lapis.nginx.http")
local body, status_code, headers = http.simple({
url = 'http://moonscript.cn',
method = "GET",
headers = { }
})
MoonScript与Redis客户端
所谓的Redis LUA客户端有两种版本,一种就是本地可运行版本,还有一个版本是OpenResty的版本,下面介绍的这段Moonscript段代码是本地版的。
作者:糖果
candylab.moon
redis = require "redis"
client = redis.connect '127.0.0.1', 6379
auth_flg = client\auth "www.moonscript.cn"
if not auth_flg
print("Auth NG!!!")
client\publish "chatroom", "www.candylab.net"
candylab.lua
local redis = require("redis")
local client = redis.connect('127.0.0.1', 6379)
local auth_flg = client:auth("www.moonscript.cn")
if not auth_flg then
print("Auth NG!!!")
end
return client ...