なっく日報

技術やら生活やらのメモ

OpenRestyからLuaRocksを使う

最近、遊び半分(半分本気)でOpenRestyを試しています。

が、英語・日本語含め情報が少なすぎなので、調べるのが辛いです。

後からくる人が苦しまないで済むよう記録として残しておきます。

OpenRestyって?

Nginx上でLuaを動かせるようにするやつ。 パフォーマンスが良いらしい(ISUCONで使う人がいたりとか)

LuaRocksって?

Luaのパッケージマネージャ。Node.jsでいうとこのnpm的な。

OpenRestyのインストール

Macならとりあえずコマンド一発で。

brew install openresty

LuaRocksのインストール

LuaRocksはOpenRestyがバンドルしているluajitを見に行かせる必要がありそうです。

※ココらへん資料が少なすぎですが、本家のマニュアルがそういう感じなので、そうなんだろうと思ってます。 OpenResty® - Official Site

この公式サイトにしたがってソースから入れるしかなさげです。

cd /usr/local/src
wget http://keplerproject.github.io/luarocks/releases/luarocks-2.2.2.tar.gz
tar zxvf luarocks-2.2.2.tar.gz
cd luarocks-2.2.2
./configure --prefix=/usr/local/opt/openresty/luajit \
    --with-lua=/usr/local/opt/openresty/luajit \
    --lua-suffix=jit-2.1.0-alpha \
    --with-lua-include=/usr/local/opt/openresty/luajit/include/luajit-2.1
make build # ←ここポイント
make install

こんな感じ。homebrewで入れているせいか、公式とパスが違います。 久々にソースからビルドなんてしたなぁ。

淡々と公式を写経し動かす

あとは写経してくのみ・・・と思いきやそのままだと動きませんでした・・・

sudo /usr/local/opt/openresty/luajit/bin/luarocks install md5
cd /usr/local/opt/openresty/nginx/
mkdir conf
vi conf/nginx.conf
vi conf/foo.lua
vi conf/bar.lua
sudo ../bin/openresty -c conf/nginx.conf

nginx.conf

worker_processes  1;   # we could enlarge this setting on a multi-core machine
error_log  logs/error.log warn;

events {
    worker_connections  1024;
}

http {
    lua_package_path 'conf/?.lua;;';

    server {
        listen       80;
        server_name  localhost;

        location = /luarocks {
            content_by_lua '
                local foo = require("foo")
                foo.say("hello, luarocks!")
            ';
        }
    }
}

foo.lua

-- conf/foo.lua

module("foo", package.seeall)

local bar = require "bar"

ngx.say("bar loaded")

function say (var)
    bar.say(var)
end

bar.lua

-- conf/bar.lua

module("bar", package.seeall)

local rocks = require "luarocks.loader"
local md5 = require "md5"

ngx.say("rocks and md5 loaded")

function say (a)
    ngx.say(md5.sumhexa(a))
end

動いた!

curl http://localhost/luarocks

感想

ムズイ。嵌る。