(続々)Windows7(x64)でWebsocketを試してみる

WindowsXP(32bit)でWebsocketを試してみる

色々と諦めて、本来の検証マシンではない方のマシンで検証を続行。

前回、gem installが上手くいかないのなんだのとあったけど
それは

gem install **** --platform mswin32

とかってプラットフォームを指定することで上手くいくことが多かった
(あくまで多かった、というだけで必ずしもそうでもなかったけど)

じゃぁ、ちょっとwebsocketのサンプルをということで
WebSocketでブラウザにプッシュ配信する - MessagePack-RPC+Rev-WebSocket
(http://d.hatena.ne.jp/viver/20100722/p1)と辺りを参考に、
githubからサンプルソースをダウンロードしてreadmeにしたがって実行してみる。

神様はまだ許してくれない。

c:/ruby187/lin/ruby/site-ruby/1.8/rubygems/dependency.rb:247:in 'to_specs': Could not find thin (>=1.2.7) amongst [...thin-1.2.11-x86-mswin3...]

thinが見つからない?
バージョンは1.2.7以上にしろ?


で、dependency.rb:247を読んでみたらば、
出力するエラーメッセージのamongstの次はインストール済のパッケージを出力するようになっている。

つまり、
amongst ...thin-1.2.11-x86-mswin3...
ってなっているということは、
thinがインストールされているということ、

お前分かってんじゃん
って言いたくなるけどぐっとこらえて、
教える方法を探る、

ひょっとして
今インストールされている1.2.11というバージョンが高すぎる?
という可能性も期待して、

gem install thin -v 1.2.7 --platform mswin32

とかでバージョンを落としたものをインストールしてみる。
で、実行してみると、

c:/ruby187/lin/ruby/site-ruby/1.8/rubygems/dependency.rb:247:in 'to_specs': Could not find thin (>=1.2.7) amongst [...thin-1.2.11-x86-mswin3...]

怒られたorz...

色々とやってみたけど、何をやっても怒られる、
その色々とやっているときにふと--platform mswin32を付け忘れた

gem install thin -v 1.2.7


もちろん予想としては
「もうインストール済だよ、バカ」
って怒られると思ったら、

1gem installed

え?もしや?

C:\>gem list

LOCAL GEMS ***
daemons (1.1.4) eventmachine (0.12.10 ruby x86-mswin32-60) iobuffer (1.0.0) json (1.5.3) msgpack (0.4.5 mswin32 x86-mingw32, 0.4.4 mswin32) msgpack-rpc (0.4.5, 0.4.4) rack (1.3.1) rev (0.3.2) rev-websocket (0.1.3) rubygems-update (1.8.5) sinatra (1.2.6) thin (1.2.11 x86-mingw32 x86-mswin32, 1.2.8 x86-mswin32, 1.2.7 x86-mingw32 x86-mswin32) tilt (1.3.2) ya2yaml (0.30) zipruby (0.3.6 mswin32)
ぬ?
thin (1.2.11 x86-mswin32, 1.2.8 x86-mswin32, 1.2.7 x86-mingw32 x86-mswin32)
version 1.2.7に x86-mingw32 x86-mswin32 と書いてある。 ってことはmswin32版とmingw版が入っているということ、 これで実は上手くいくのでは?
C:\>ruby ./echo.rb
C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/dependency.rb:247:in `to_specs': Could not find eventmachine (>= 0.12.6) amongst
 [daemons-1.1.4, eventmachine-0.12.10-x86-mswin32-60, iobuffer-1.0.0, json-1.5.3, msgpack-0.4.5-x86-mswin32, msgpack-0.4.4-x86-mswin32,
 msgpack-rpc-0.4.5, msgpack-rpc-0.4.4, rack-1.3.1, rev-0.3.2,rev-websocket-0.1.3, rubygems-update-1.8.5, sinatra-1.2.6, thin-1.2.11-x86-mswin32
, thin-1.2.8-x86-mswin32, thin-1.2.7-x86-mswin32, thin-1.2.7-x86-mingw32, tilt-1.3.2, zipruby-0.3.6-x86-mswin32] (Gem::LoadError)
エラー対象が変わった。
dependency.rb:247:in `to_specs': Coul
d not find eventmachine (>= 0.12.6)
ってことは「--platform mswin32」つきで入れたものは mingw32版にしろってことか。 このときなぜか、一度「--platform mswin32」で入れたものが gem install **** だけでもエラーにならなくなっていた、不思議。 そして、実行
C:\home\ruby\frsyuki-rev-websocket-e5d3d97\examples>ruby ./echo.rb
C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in `gem_original
_require': no such file to load -- thin_parser (LoadError)
        from C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in
`require'
        from C:/Ruby187/lib/ruby/gems/1.8/gems/rev-websocket-0.1.3/lib/rev/webso
cket.rb:3
        from C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in
`gem_original_require'
        from C:/Ruby187/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:59:in
`require'
        from ./echo.rb:4
どうやらthin_parserが認識されておらず、 thin_parserを別ディレクトリにコピーしてみる。 lib\ruby\gems\1.8\gems\thin-1.2.11-x86-mingw32\lib\1.8\thin_parser.so  ↓ lib\ruby\gems\1.8\gems\thin-1.2.11-x86-mingw32\lib\thin_parser.so で、実行。
C:\>ruby ./echo
./echo:3:in `fork': fork() function is unimplemented on this machine (NotImpleme
ntedError)
        from ./echo:3

どうやら、fork()は推奨されていないよう。 なので直接echo.rbを叩いてみる。
C:\home\ruby\frsyuki-rev-websocket-e5d3d97\examples>ruby ./echo.rb
start on 0.0.0.0:8081
おおおおぉぉぉぉぉぉぉ、成功

mingwとmswin32

wikipediaで調べる。
MinGW(ミン・ジー・ダブリュー、Minimalist GNU for Windows)はGNU ツールチェーンのWindows移植版である。MinGWWindows APIのためのヘッダファイルを含んでおり、フリーのコンパイラであるGCCを、Windowsアプリケーションの開発のために利用できる。 MinGWプロジェクトでは、2つの主要なパッケージを開発、配布している。Windows環境に移植されたGCCは、コマンドラインから使用することも、IDEへ統合することもできる。もう1つのMSYS(minimal system) は軽量のUNIX風シェル環境であり、端末エミュレータのrxvtと、開発ツールのautoconfを実行可能にするためのPOSIXコマンド群とが含まれている。 この2つのパッケージは、Cygwinからフォークして誕生した。CygwinではWindowsの機能性を犠牲にすることで、より機能的なUnix風環境を提供している。なお、どちらのパッケージもフリーソフトウェアで、Win32APIを利用するためのヘッダファイルはパブリックドメインで提供されており、GNUツールの移植版はGPLである。MinGWの個々のGNUツール及びMSYSは、MinGWの公式サイトより入手可能である。 http://ja.wikipedia.org/wiki/MinGW
分かるけど、じゃぁ--platform mswin32オプションは何だったの??