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
感想
ムズイ。嵌る。