おまぬけ活動日誌

最近のツッコまれどころ

この日誌から Google してもらう


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_homeHOME環境変数からロードパスを作っている部分がありました。このファイルは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/setuprequireできました。むふふ。


作り手とその取り巻きだけが楽しんでる間は本物じゃない。その中身が理解できない人々の生活を変えてこそ本物だ


zunda <zunda at freeshell.org>