rubygem が反応しなくなったら
- 2013/11/04 (Mon) |
- ruby |
- CM(0) |
- Edit |
- ▲Top
仮想マシンを使っていくつもOSをインストールし、Ruby on Rails の環境を作っていると、ときたまrubygemが全く反応しなかったり、反応しても不安定になることがある。筆者が確認できた特徴は以下である。
・gem list --remote が反応しない。(ごくたまに反応することはある)
・gem install が反応しない。
なお gem install については、V オプションを付けて実行すると、現在の通信状況が分かるので便利だ。
例) gem install -V gem名
(--no-ri --no-rdoc オプションを付けるとインストール時間の節約にもなる)
gem install にVオプションを付けて実行して以下のようなエラーが出たら要注意。
上記2点のエラーには非常に手こずらされた。
結論から言うと、これらのエラーは大体、次の問題のどれかまたは全てに起因している。
・DNSの問題で「rubygem.org」の名前解決ができない
・SSLの問題でHTTPSアクセスを拒否されてしまっている(ように見える)
・ファイアウォールで443番ポートへの送信を拒否している
ファイアウォールに関しては確認の上、443番ポートへの外部送信を許可すればよいとして、DNSを原因とする場合は、wget コマンドを使って確認することができる。
この反応が出たら、何らかの理由でDNSが名前解決をできていない可能性を疑うべきだろう。
それに加えて、SSLの問題が絡んでいる可能性もある。それについてはGitHubに掲載されている。
ではここまでに書いた状況に陥ってしまったらどうすればいいのだろう?
gemコマンドの入力を通常とは変える、というのがその答えとなる。
まずはnslookup(またはdig)コマンドでrubygems.org のIPアドレスを特定する。
次にgem install で --source オプションを指定し、gemのダウンロード元のサーバーを特定するのだが、このときに先のIPアドレスを指定する。またプロトコルはhttps ではなく「http」とする。この対応で正常にgemをインストールできるようになるはずだ。
リモートサーバー(ダウンロード元サーバー)にあるgem の一覧を見るときもこれと同じ工夫をすれば良い。
が、しかし、
恐らくこのブログを見ている人の少なくない数がRailsを使っていると思われるが、もしその人の環境で上述したようにrubygem が動かない場合、それは
そして筆者もすぐにその穴に落ちてしまったのだった 笑
この場合、良いのか悪いのか別にして筆者の場合は/etc/hosts ファイルに直接 rubygems.org のアドレスを書くことで回避できた(ように見えるが確信はない)。
・gem list --remote が反応しない。(ごくたまに反応することはある)
・gem install が反応しない。
なお gem install については、V オプションを付けて実行すると、現在の通信状況が分かるので便利だ。
例) gem install -V gem名
(--no-ri --no-rdoc オプションを付けるとインストール時間の節約にもなる)
gem install にVオプションを付けて実行して以下のようなエラーが出たら要注意。
Unable to resolve dependencies:
sprockets-rails requires sprockets (~> 2.8);
railties requires thor (< 2.0, >= 0.18.1);
actionmailer requires mail (~> 2.5.4);
activerecord requires activemodel (= 4.0.1), arel (~> 4.0.0), activerecord-deprecated_finders (~> 1.0.2);
actionpack requires builder (~> 3.1.0), rack (~> 1.5.2), rack-test (~> 0.6.2), erubis (~> 2.7.0);
activesupport requires thread_safe (~> 0.1)
ERROR: Could not find a valid gem 'rails' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - no such name (https://rubygems.org/latest_specs.4.8.gz)
上記2点のエラーには非常に手こずらされた。
結論から言うと、これらのエラーは大体、次の問題のどれかまたは全てに起因している。
・DNSの問題で「rubygem.org」の名前解決ができない
・SSLの問題でHTTPSアクセスを拒否されてしまっている(ように見える)
・ファイアウォールで443番ポートへの送信を拒否している
ファイアウォールに関しては確認の上、443番ポートへの外部送信を許可すればよいとして、DNSを原因とする場合は、wget コマンドを使って確認することができる。
> wget https://rubygems.org/specs.4.8.gz
--2013-11-04 13:18:16-- https://rubygems.org/specs.4.8.gz
rubygems.org をDNSに問いあわせています... 失敗しました: ホスト名に対応するアドレスがありません.
wget: ホストアドレス `rubygems.org' を解決できませんでした。
この反応が出たら、何らかの理由でDNSが名前解決をできていない可能性を疑うべきだろう。
それに加えて、SSLの問題が絡んでいる可能性もある。それについてはGitHubに掲載されている。
ではここまでに書いた状況に陥ってしまったらどうすればいいのだろう?
gemコマンドの入力を通常とは変える、というのがその答えとなる。
> nslookup rubygems.org
;; Question section mismatch: got rubygems.org/AAAA/IN
Server: 220.152.38.201
Address: 220.152.38.201#53
Non-authoritative answer:
Name: rubygems.org
Address: 54.245.255.174
> gem install -V rails --source http://54.245.255.174
まずはnslookup(またはdig)コマンドでrubygems.org のIPアドレスを特定する。
次にgem install で --source オプションを指定し、gemのダウンロード元のサーバーを特定するのだが、このときに先のIPアドレスを指定する。またプロトコルはhttps ではなく「http」とする。この対応で正常にgemをインストールできるようになるはずだ。
リモートサーバー(ダウンロード元サーバー)にあるgem の一覧を見るときもこれと同じ工夫をすれば良い。
> gem list --remote --source http://54.245.255.174
が、しかし、
まだこれで終わりではなかった……笑
恐らくこのブログを見ている人の少なくない数がRailsを使っていると思われるが、もしその人の環境で上述したようにrubygem が動かない場合、それはbundlerも動かない
ことを意味している。そして筆者もすぐにその穴に落ちてしまったのだった 笑
この場合、良いのか悪いのか別にして筆者の場合は/etc/hosts ファイルに直接 rubygems.org のアドレスを書くことで回避できた(ように見えるが確信はない)。
vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
54.245.255.174 rubygems.org
PR
カレンダー
フリーエリア
最新CM
最新記事
(06/05)
(06/04)
(06/04)
(11/18)
(11/18)
ブログ内検索
最古記事
(09/15)
(09/20)
(09/27)
(09/27)
(10/11)
COMMENT