2017年09月06日(Wed) 朝からちゃんとした雨 [長年日記]
● [tDiary] 自作のネイティブRubyライブラリをCGIから使う
このtDiaryはNet BSD上で動いていて、ここのところコードの更新ができていません。更新を妨げている原因のひとつが、ホストに負荷をかけすぎないためにCPU負荷や自ユーザーのプロセス数をプロセスを起動せずにシステムコールだけで取得できるようにした自作のRubyライブラリでした。CGIから起動されるRubyスクリプトはまずこのライブラリを読んでシステムの負荷を測定し、問題がなければtDiaryの処理を始めます。これをなんとかモダンなエコシステムに乗せて更新を簡単にしたい。
というわけで、まずはsetup.rbではなくgemspecからビルドするようにしました。さて。次はCGIから起動されるスクリプトからこれを読めるようにになくちゃ。試行錯誤の結果、下記のようになりました。
Rubyの環境。このホストには、ruby 2.3.4p301が/usr/pkg/bin/ruby23としてインストールされています。これを使うようにします。
PATHの最初に$HOME/.gem/ruby/2.3.0/binを追加しました。
Gemfile。ローカルな変更を使ってしまわないよう、GitHubにpushしたものを使うようにします。
このライブラリをローカルから参照できるようにします。
CGIスクリプトは下記のような感じ。
これをローカルから実行すると、Content-typeレスポンスヘッダと共に端末に結果が表示されます。もうひといき。
さて。Apacheから実行しますよ。
.htaccess
これがHTTP/1.1 500 Internal Server Errorになるんだな。CGIスクリプトを書き換えてエラーの内容を確認する。
RubyからのstderrもApacheに渡るようになります。
うーん。bundler/setupは~/.gem/ruby/2.3.0/gems/bundler-1.15.4/lib/以下にあるのです。下記ならApacheからでも実行できる。
どこかで誰かがこのパスを特別扱いしてるんだなあ…
最近のツッコまれどころ