忍者ブログ

ぢみへんプログラミング日誌

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

rubygem が反応しなくなったら

仮想マシンを使っていくつもOSをインストールし、Ruby on Rails の環境を作っていると、ときたまrubygemが全く反応しなかったり、反応しても不安定になることがある。筆者が確認できた特徴は以下である。
・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

COMMENT

NAME
TITLE
MAIL (非公開)
URL
EMOJI
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
COMMENT
PASS (コメント編集に必須です)
SECRET
管理人のみ閲覧できます
 
  

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

フリーエリア

最新CM

バーコード

ブログ内検索

Copyright ©  -- ぢみへんプログラミング日誌 --  All Rights Reserved

Design by CriCri / Material by petit sozai emi / powered by NINJA TOOLS / 忍者ブログ / [PR]