あいつの日誌β

働きながら旅しています。

heroku-groonga-buildpack で悩んでいる

どうした?

heroku 上で groonga を使ってアプリを作りたいので heroku-buildpack-multi + heroku-groonga-buildpack を使っていたらちょっと困りました。

何が?

nroonga という node.js のライブラリがあるのですが、上記の環境だと期待した結果を返してくれないです。

具体的には以下のコードです。

https://github.com/nroonga/nroonga/blob/master/examples/test.js

nroonga = require('../lib/nroonga')

db = new nroonga.Database()

db.command('status', function(error, data) {
  console.log(data);
});

上記のdb.command の callback の引数が null, null となっています。

何故?

調べたところ、heroku 上では以下の箇所で result が空っぽの模様。自分の Mac 上ではちゃんと結果が帰って来ている。

https://github.com/nroonga/nroonga/blob/master/src/nroonga.cc#L108

で、nrooga では groonga の output_type を msgpack で使うようなっています。

https://github.com/nroonga/nroonga/blob/master/lib/nroonga.js#L69

で、色々調べた結果 heroku 上で --output_type msgpack だと期待した結果になっていないっぽい。

検証した

https://github.com/okamuuu/test-heroku-groonga

json だと返事するが(ちなむと tsv も返事する)

% heroku run '~/vendor/groonga/bin/groonga ~/groonga/database status --output_type json'   
Running `~/vendor/groonga/bin/groonga ~/groonga/database status --output_type json` attached to terminal... up, run.4295
[[0,1407550261.92818,0.000120878219604492],{"alloc_count":139,"starttime":1407550261,"uptime":0,"version":"4.0.4","n_queries":0,"cache_hit_rate":0.0,"command_version":1,"default_command_version":1,"max_command_version":2}]

msgpack だと返事がない

% heroku run '~/vendor/groonga/bin/groonga ~/groonga/database status --output_type msgpack'
Running `~/vendor/groonga/bin/groonga ~/groonga/database status --output_type msgpack` attached to terminal... up, run.1978

という事で --outpu_type msgpack だと上手く動いていないらしい

どうする?

json だったら動くわけだし nroonga の msgpack の箇所を json に変えればいいのかも知れないけど根本的な解決策かどうかは疑問。

とはいえ groonga の内部を追いかけるよりはてっとり早い。

んー、どうしよう。とりあえず一晩寝てから考える。

追記(記事投稿後10分以内)

開発者にも報告したところ速攻で連絡頂きました。ありがとうございます。

  • heroku-groonga-buildpack で使われる groonga はそもそも msgpack 対応版ではないとの事。
  • msgpack対応でビルドするのを検討頂けるとの事。