(続々)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移植版である。MinGWはWindows 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オプションは何だったの??