Heroku で Groonga を動かす
これつかうと Heroku の上で Groonga が動かせそうだけど README 読んでもいまいちなにが起きるか分からないし、だれも言及していなくて、すごい闇のツールっぽい。
ちなみに動かしてみると Groonga の HTTP サーバが Heroku 上で使えるようになる。 Groonga 用の HTTP サーバなので、他のウェブアプリケーションとは同居できない感じだった。頑張ればできるんだろうけど。
やりかた
mkdir heroku-groonga cd heroku-groonga git init heroku create --stack cedar --buildpack https://github.com/groonga/heroku-buildpack-groonga.git
mkdir groonga cd groonga vi 0.grn
grn ファイルは、すでにある Groonga DB からダンプできる。
groonga original/db dump > 0.grn
git add . git commit -m 'first commit' git push heroku master
これで、 Heroku 上で Groonga が動く。
認証
これだと Groonga の API が認証なしで全部使えてしまうのであんまよくない。 Groonga の HTTP サーバは nginx を使っているらしいので、 nginx の conf を別で定義できるやつを作った。
やりかた
mkdir heroku-groonga cd heroku-groonga git init heroku create --stack cedar --buildpack https://github.com/shunirr/heroku-buildpack-groonga.git
mkdir groonga cd groonga vi groonga-httpd.conf
こんな感じにかく。
worker_processes 1; # Match this to the file owner of groonga database files if groonga-httpd is # run as root. #user groonga groonga; events { worker_connections 1024; } http { include /app/vendor/groonga/etc/groonga/httpd/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # The default groonga database path. groonga_database /app/vendor/groonga/var/lib/groonga/db/db; # Create a groonga database automatically if the groonga database doesn't # exist. # # Note that this option is danger when worker_processes is greater than 1. # Because one or more worker processes may create the same groonga database # at the same time. If you can create a groonga database before running # groonga-httpd, you should do it. groonga_database_auto_create on; server { listen 10041; server_name localhost; location /d/ { groonga on; groonga_database /app/groonga/database; auth_basic "Require Auth"; auth_basic_user_file /app/groonga/htpasswd; } location / { root /app/vendor/groonga/share/groonga/html/admin; index index.html; auth_basic "Require Auth"; auth_basic_user_file /app/groonga/htpasswd; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
お好みで htpasswd ファイルを作っておく。
htpasswd -c htpasswd dankogai
git add . git commit -m 'first commit' git push heroku master
これで、 Heroku 上で Basic 認証がついた Groonga が動く。
つかう
Groonga の Web API 、ラッパーが無い (あとで作りたい) ので、頑張りましょう。このように使えます。
http://groonga/d/コマンド名.output_type?引数名1=値1&引数名2=値2&...
基本的に select しか使わないはずなのでこんな感じ。
http://groonga/d/select.json?table=Entries&query=body:@ゆい
JSON でデータが返ってくるけど、結構微妙な構造をしてて、あらゆるものが配列に入っている。
あと、 10 件しかデータが入ってない (どうやってカウントやページ指定するんだろう) 、スニペットとかどうやって作るのかよくわからない。
まとめ
Heroku で無料で人間的な全文検索が出来るようになりました。