会社でgroongaを実行するとDBの作成はできるんだけどサーバーモードで起動しない(or起動直後終了?)してしまいました。
で、問題は解決してないのですがメモ。後日修正される、はず。
読んでもいいけど信じちゃだめ!!
今風邪でくらくらしながらコレ書いてるからメモ内容が間違えてる可能性も高い(なぜ公開している)
現象
会社
MacOSX10.7 groonga --version groonga 1.2.6 [darwin11.1.0,x86_64,utf8,match-escalation-threshold=0,nfkc,mecab,zlib,kqueue]
自宅
MacOSX10.6 % groonga --version [~/project/Youtube-Movie] groonga 1.2.4 [darwin10.7.0,x86_64,utf8,match-escalation-threshold=0,nfkc,mecab,zlib,kqueue]
症状
会社で以下のコマンドは動作します。
% groonga -n test.db
ですが次のようなコマンドは動かない?
% groonga -s --port 10041 --protocol http test.db %
犯人誰?
実はTest::TCPというgroongaサーバーを一時的に起動してテストが終了したらgroonga -s を実行しているpidをkillするプログラムを使っているのですがこれがこけていたので異変に気づきました。
ちなみにTest::TCPをgit cloneして、prove -lvr t を実行したところ問題はありませんでした。Test::TCPのversionは1.14で最新
で、よくよくコードを追いかけたらgroongaも確かに思ったように動かないのですが、そもそもTest::TCP::empty_portがdieしている(portが空いていない場合はそれが想定の処理)。
_check_port内の以下の処理が成功していないらしい
my $remote = IO::Socket::INET->new( Proto => 'tcp', PeerAddr => '127.0.0.1', PeerPort => $port, );
ためしに以下のコードを会社で実行するとdieしてしまう
use strings; use warnings; use IO::Socket::INET; my $remote = IO::Socket::INET->new( Proto => 'tcp', PeerAddr => '127.0.0.1', PeerPort => $port, ) or die;
で、次のコードはdieしない。
use strings; use warnings; use IO::Socket::INET; my $remote = IO::Socket::INET->new( Proto => 'tcp', LocalAddr => '127.0.0.1', LocalPort => $port, ) or die;
ただし、この結果が何を意味しているのかわからない。
たぶん見当違いだろうけど何かのヒントになるかもしれないので自分が忘れないようにメモ
俺の推理
追記
nslookup localhost で /etc/hosts を見ていなかったです...