2017年09月08日(Fri) 遠方に見えた雨雲は来なかった [同日]
● [tDiary] CGIからホームディレクトリにインストールされたGemを使うにはGem.use_paths
CGIからGemに依存するRubyスクリプトを起動するとrequireできないGemがあるのに気づきました。どうもCGI中ではHOME環境変数が設定されていないのが問題のようで、ローカルに起動する場合にも再現できました。
HOME= ./index.rb /usr/pkg/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- bundler/setup (LoadError) from /usr/pkg/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require' from ./index.rb:3:in `<main>'
rubygems.rbをつらつらと眺めると、Gem.find_homeでHOME環境変数からロードパスを作っている部分がありました。このファイルはRubyの起動時に読まれちゃうので後からHOME環境変数を変えることはできない、と思ったら、Gem.use_pathsというメソッドを見つけました。これを使おう。
#!/usr/pkg/bin/ruby23 Gem.use_paths('/home/zunda/.gem/ruby/2.3.0', Gem.path) require 'bundler/setup' require 'netbsd_sysinfo' puts "Content-type: text/plain\n\n" puts "Load averages: #{NetbsdSysinfo.loadavg}" puts "Number of processes: #{NetbsdSysinfo.nprocs}"
これでやっとこgem23 install bundle --user-installしたbundler/setupをrequireできました。むふふ。
そうそう、NetbsdSysinfoのインストール手順は下記のとおり
$ cd ~/local/src/netbsd_sysinfo $ rake23 build : netbsd_sysinfo 0.4.0 built to pkg/netbsd_sysinfo-0.4.0-netbsd.gem. $ gem23 install --user-install pkg/netbsd_sysinfo-0.4.0-netbsd.gem $ ruby23 -r netbsd_sysinfo -e 'p NetbsdSysinfo.loadavg'
[ツッコミを入れる]
最近のツッコまれどころ