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