ホーム‎ > ‎Ruby入門‎ > ‎

Windows で Ruby を使うときにハマったことメモ

受講生の実習を進めていくうちに、受講生の環境でネットワーク関係でエラーが出て困っていました。そのハマったことのメモです。
おそらくここに書くのは、原因が Ruby 側にあるか Windows 側にあるかはともかくとして、 Windows という OS 依存の内容だと思います。

免責事項

  • エラーメッセージ全部記録しているわけではないので、完全なトラブルシューティングではありません。
  • Windows 依存の内容と書きましたが、それは私の勘違いで、別の原因かもしれませんし、マシンによっては再現しないかもしれません。
  • また、何らかの修正が加わって今後は発生しない問題になるかもしれません。
  • 受講生の環境でエラーが出なければそれでいいと考えましたので、問題が修正された段階で調査は終了しています。徹底した調査まではしていません。
  • この文章を書いたのは TA 高橋です。
以上をご理解ください。

gem でプロクシを通す

実習用 PC は、基本的にはここにかいてある串刺しを実行していました。同等の設定を行った Linux 機は gem が普通に使えました。
しかし Windows の場合は gem でも串を通さねばならないようです。(Thanks to 鳥居先生)

>gem install google-api-client
ERROR:  Could not find a valid gem 'google-api-client' (>= 0), here is why:
         Unable to download data from https://rubygems.org/ - Errno::ECONNREFUSED: Failed to open TCP connection to api.rubygems.org:443 (No connection could be made because the target machine actively refused it. - connect(2) for "api.rubygems.org" port 443) (https://api.rubygems.org/specs.4.8.gz)

オプションが有効ならば gem install (パッケージ名) -p http://cache.ks.prv:8080 とし
システム環境変数を設定するなら HTTP_PROXY と HTTPS_PROXY を cache.ks.prv:8080 とする。 

証明書が読み込めずライブラリで SSL 通信ができない

gem install rubygems-update --source http://rubygems.org/
update_rubygems

してもうまくいきませんでした。証明証を直接ダウンロードしてきてもうまくいかず。
どうやら証明証を参照する場所が違っているっぽい。こちらにいきつく。

>ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE_ENV"
"SSL_CERT_FILE"

>ruby -ropenssl -e "p OpenSSL::X509::DEFAULT_CERT_FILE"
"C:/Users/Justin/Projects/knap-build/var/knapsack/software/x86-windows/openssl/1.0.1l/ssl/cert.pem"

「Justin なんて名前は知りません」という受講生。ぐぐると Who is Justin? なんて出てきて皆でにやける。
結局こちらにたどり着く。結果としては certified という gem をインストール。
irb やプログラムの冒頭では require 'certified' とするようにしたところ、なんとか解決。
この解決策はこちらの下のほうで概要が論じられている通り少し強引なのだが、まぁ受講生がうまくいけば良いじゃないかと私は納得した。

(補遺) 証明書が読み込めず gem のインストールできない

これは特に Windows の問題というわけではないようですが、こちらのとおりにやりましたら解決しました。

教訓

計算数学 I や II の受講生で Ruby をやる際には Linux を使ってもらうのが何かと安全かなと思いました。トラブルシューティングする過程で勉強するのも大事です(私の場合は勉強になりました)が、計算機プログラミングの勉強という意味ではしなくても良い苦労だというのは否めません。
Windows はやりたければ気楽に触れるし、UNIX 系ででプログラム走らせる機会は将来的には多くなるでしょう。そういう意味で Linux は新しいことに挑戦してもらうという名目にもなるでしょう。気に入ってもらえれば Linux 入れたり Mac 買ったりできますし。
また、こういうことがあるから、少し余裕を持って、前倒しで実習していくのが大事だなと思いました。これは受講生の計画に任されますが、「『このくらいの時間をかければこのくらい進む』ということはしばしば誤算がある」ということは、うまく伝えなくてはならないと思いました。
Comments