p368 で Net::SSH が刺さるという問題 https://capistrano.lighthouseapp.com/projects/8716/tickets/79-capistrano-hangs-on-shell-command-for-many-computers-on-ruby-186-p368 があって,それは Ruby 側で解決 http://redmine.ruby-lang.org/issues/show/1848 されたのですが,どうも Net::SSH 側でもなにかしら変更があったようで 2.0.14 が リリース されました.
とここまではいいのですが,Ubuntu 8.04.2 の Ruby は 1.8.6-p111 で,これだと刺さる現象が再現してしまいます.何が問題かはわかりませんが,2.0.13 だと刺さらないことから,下記の部分じゃないかと想像できます.
module Net; module SSH
# This class contains miscellaneous patches and workarounds
# for different ruby implementations.
class Compat
# A workaround for an IO#select threading bug in MRI 1.8.
# See: http://net-ssh.lighthouseapp.com/projects/36253/tickets/1-ioselect-threading-bug-in-ruby-18
# Also: http://redmine.ruby-lang.org/issues/show/1993
if RUBY_VERSION >= '1.9' || RUBY_PLATFORM == 'java'
def self.io_select(*params)
IO.select(*params)
end
else
SELECT_MUTEX = Mutex.new
def self.io_select(*params)
SELECT_MUTEX.synchronize do
IO.select(*params)
end
end
end
end
end; end
Mutex Lock しているんですが,これがなにか悪さしているようです.ちゃんと調べてないのであれですが,もし同様の問題ではまってる方はバージョンダウンしてみてください.
##追記 Ruby Enterprise Editionでも刺さりました.バージョンは以下のもの.
% ruby -v
ruby 1.8.6 (2008-08-11 patchlevel 287) [x86_64-linux]
Ruby Enterprise Edition 20090610
comments powered by Disqus