Closed kazuna closed 10 years ago
報告ありがとうございます。 エラーメッセージを一部整形させてもらいました。
Number of ..
はマッチしたレコードが多い時にgrep等を使って高速に検索する機能です。gmilk -e grep
するとマッチしたレコードが少なくてもgrepを使って検索します。上記エラーメッセージを見る感じ、その部分は正しく動いている印象です。
※ そもそもgrepやxargsの無い環境だと上記機能は起動しません。
検索結果の制限はMilkode側ではかけているつもりは無いのですが、内部で使っているライブラリやリソース不足で何か起きているのかもしれません。
$ gmilk -a NULL -c
だとどのような結果が出ますか?
Number of ..
の英文が変だったので変更しておきます。
色々と試したところ、rebuildをかけると前述のcli_grep.rb:262のエラーが出なくなりましたが、相変わらず検索結果が多いと結果が表示されないようです。
とくに'-e grep'と指定しても'xargs'を使用しようとしているように見受けられます。
また質問ですが、"Number of ..."の場合でも強制的に外部プログラムを使わずに検索することは出来ないのでしょうか?
$>gmilk -a NULL Number of records is large. Use auto external tool (gmilk -e grep) 'xargs' is not recognized as an internal or external command, operable program or batch file.
$>gmilk -a NULL -c 7518 records
$>copy \Windows\System32\findstr.exe grep.exe 1 file(s) copied.
$>gmilk -e grep -a NULL 'xargs' is not recognized as an internal or external command, operable program or batch file.
$>copy grep.exe xargs.exe 1 file(s) copied.
$>gmilk -e grep -a NULL FINDSTR: Cannot open -n FINDSTR: Cannot open NULL
rebuildされたことでデータベース周りのエラーは直ったけど、 次に外部プログラムを使ったエラーが出てしまっているみたいですね。 トラブルが多くてすいません。
本来はgrepやxargsが入っていない環境(素のWindowsなど)だと 外部プログラムの検索を行わないはずなのですが、その判定が上手くいっていないようです。 私のWindows環境だとCygwinが入っていたため上手く動いていました。
ダウンロードしたgem本体に手を入れるパッチ的な対処になりますが、
C:/Ruby/lib/ruby/gems/1.9.1/gems/milkode-1.4.0/lib/milkode/grep/cli_grep.rb:212
# レコード数が多い時は"-e grep"で検索
if Util::exist_command?('cat') && Util::exist_command?('grep') && Util::exist_command?('xargs')
$stderr.puts "Because number of records is large, Milkode use external tool. (Same as 'gmilk -e grep')"
search_external_tool(arguments, option, records, 'grep -n', 'grep')
else
findGrep.searchAndPrint2(stdout, records)
end
を
# レコード数が多い時は"-e grep"で検索
findGrep.searchAndPrint2(stdout, records)
# if Util::exist_command?('cat') && Util::exist_command?('grep') && Util::exist_command?('xargs')
# $stderr.puts "Because number of records is large, Milkode use external tool. (Same as 'gmilk -e grep')"
# search_external_tool(arguments, option, records, 'grep -n', 'grep')
# else
# findGrep.searchAndPrint2(stdout, records)
# end
のように書き換えると、外部プログラムを使わずに検索出来るはずです。 次回更新までには何らかの対策をしておきます。
※ お使いの環境はCygwin等のUNIXツールが入っていないWindowsでしょうか?
お察しの通りCygwin等を入れていない素のWindowsです。 対策を考慮していただきありがとうございます。
ところで結果が沢山あった場合に外部検索とは、何レコードくらいを沢山と定義しているのでしょうか?
現状だと500レコードがしきい値になっています。 以前マッチ数が多いと遅すぎる、という指摘を受けてこのような機能を付けた経緯があります。
de30315 にて修正しました。対応が遅くなりました。
素のWindowsでも外部プログラムの検索が出来るようになったので、 レコード数が多くても間違えてxargsを使うことはないはずです。
また、--no-external
を使うと強制的に外部プログラムの使用を抑制します。
これは1.5.0
でも使えるはずです。
次回バージョンアップに反映される予定です。 報告ありがとうございました。
Milkode 1.6 に反映されました。
検索した結果が多すぎるとこのエラーが出るみたいなのですが、いくつぐらいまでなら大丈夫なのでしょうか?
それからgrepなどを代わりに使えと出ますがうまく動かないようなのですが、何が問題なのでしょうか?