アプリ版:「スタンプのみでお礼する」機能のリリースについて

ruby19 -vは使えるのに、gem19 -vが使えない

▽ruby1.9をcoreserverとmacのホームディレクトリにインストール - Born Neet]
  http://blog.bornneet.com/Entry/282/
を参考に、レンタルサーバに「ruby-1.9.2-p180」をインストールしようとしています。

「ruby19 -v」と打つと、「ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]」と表示されるのですが、
「gem19 -v」と打つと、「command not found」となってしまいます。

「gem19 -v」を有効にするには、どうすれば良いでしょうか?

<インストールする際に打ったコマンド>
/local/src/ruby-1.9.2-p180> ./configure --prefix=$HOME/local --program-suffix=19

<エラーと思われる箇所>
make[1]: Leaving directory `/virtual/ユーザー名/local/src/ruby-1.9.2-p180'
Generating RDoc documentation
./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb ./tool/runruby.rb --extout=.ext -- "./bin/rdoc" --no-force-update --all --ri --op ".ext/rdoc" "."
./tool/runruby.rb:63: warning: Insecure world writable dir /virtual/ユーザー名/lib/PEAR in PATH, mode 040777
uh-oh! RDoc had a problem:

Directory .ext/rdoc already exists, but it looks like it isn't an RDoc directory.

Because RDoc doesn't want to risk destroying any of your existing files,
you'll need to specify a different output directory name (using the --op <dir>
option)

「RDoc」ってドキュメント(?)だから関係ないようにも思うのですが、何か影響しているのでしょうか?

.ext/rdoc は既に存在しているけど、「RDoc directory」に見えない、とは、どういうことなのでしょうか?

A 回答 (6件)

installed_spec_directoriesで検索したら、いろいろ出てきました。


ようするに、それまでのgemと両方混ぜて使おうとするとよくないようです。
対策としては
・configureに--disable-gemを付けて、ruby1.9.2のgemを無効にする
・旧gem関連のファイルを削除して、ruby1.9.2のgemだけを使う。GEM_HOMEはこちらで関係ありそう
のどちらからしいです。

RDocについてはわかりません。こちらでは特になにもなかったので
    • good
    • 0
この回答へのお礼

何度も回答いただき、ありがとうございました。

大変参考になりましたー

お礼日時:2012/03/25 14:10

「./tool/runruby.rb:63: warning: Insecure world writable dir /virtual/ユーザー名/lib/PEAR in PATH, mode 040777」ってあったので、ただの警告だと思ってました。



実際にはここは関係無くて、その後の部分が「エラー」だとmake失敗なようです。
成功する条件は、「.ext/rdocが無い」「.ext/rdocが存在していて、かつ、正常なRDoc用のファイル構成になっている」の2つのようです。


先日インストールした1.9.3のビルド環境が残っていたので実験しました。
・.ext/rdocの中身を消して,ディレクトリだけ残してmake
→「uh-oh! RDoc had a problem:」以下のメッセージが出てmake失敗
・ make clean-rdoc
で.ext/rdocを完全に削除した後、make
→正常終了

> 解凍したディレクトリ(ruby-1.9.2-p180)で、「which ruby19」とか「ruby19 -v」とかやっても全く無意味ということになるのでしょうか?

man which を読みましょう。
whichはPATHから順番に探します。もし、PATHに「.」が含まれているなら、現在のディレクトリからも探します。
ビルドしたruby19のあるディレクトリで探せば、当然見付かりますが、それではインストールしたものを探していることにはなりません。

なお、セキュリティ等の理由から、PATHには.を入れないことをお勧めします。


> 一般的にmake時のエラーというのは、例えば複数個所エラーがあった場合、
> 最初のエラーが見つかった時点で、処理がストップしてしまうものでしょうか?

そうです。
-k オプションでエラーを無視して進みますが、それも依存関係に問題が無い部分だけで、例えば、make -k installとしても、インストールするファイル全てが揃っていないと、そちらのビルドが先に行われます(そこでエラーがあれば、結局進みません)

> また、「run with --debug for full backtrace」は、どうやるのでしょうか?
この訳は「完全なバックトレースのためには(for full backtrace)『--debug』と一緒に実行してください」
です。
make --debug
です。これもman make やmake --helpをよく読みましょう。

この回答への補足

回答ありがとうございました。

その後、試行錯誤して、進展したのですが、また躓いてしまいました。

<現状>
> which ruby19
/virtual/ユーザー名/local/bin/ruby19
> which gem19
/virtual/ユーザー名/local/bin/gem19
lsでも存在確認しました。

> ruby19 -v
ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]
ここまではいい感じです。

ところが、
> gem19 -v
と打つと
/virtual/ユーザー名/local/lib/rubygems/source_index.rb:68:in `installed_spec_directories': undefined method `path' for Gem:Module (NoMethodError)
from /virtual/ユーザー名/local/lib/rubygems/source_index.rb:58:in `from_installed_gems'
from /virtual/ユーザー名/local/lib/rubygems.rb:881:in `source_index'
    (中略)
from /virtual/ユーザー名/local/bin/gem19:8:in `<main>'
となってしまいます。
どうすれば良いのでしょうか?
「Gem」モジュールのためのパスが定義されていない?
「.bashsrc」で、「export GEM_HOME=$HOME/local/lib/ruby/gem」と記述しているのですが、何か影響しているのでしょうか? これを削除すると、普通の(gem19ではない)gemが、動かなくなると思うのですが…


<インストール時に影響しているかもしれないと思われる点>
▼make
make clean-rdoc
make: Nothing to be done for `clean-rdoc'.
となってしまったので、手動で「rdoc」ディレクトリを削除してから、「make」しました
▼make install
「make install」と打つと、また同じエラーになったため、再び「rdoc」ディレクトリを手動削除してから、「make -k install」

ところが、途中で、またもやエラーとなってしまいました。
100% [515/515] doc/re.rdoc

Generating RI...
make: *** [rdoc] Killed
./miniruby -I./lib -I.ext/common -I./- -r./ext/purelib.rb ./tool/rbinstall.rb --make="make" --dest-dir="" --extout=".ext" --mflags="-k" --make-flags="k" --data-mode=0644 --prog-mode=0755 --installed-list .installed.list --install=all --rdoc-output=".ext/rdoc"

ここで、手動で(?)makeしました。
自分でも何をしているか、全然分からないのですが、参考リンク先にあったので、真似してやってみました。
具体的には、表示されたコマンド「./minirubyから-rdoc-output=".ext/rdoc"まで」をそのまま打っただけです。


そうすると、下記表示になり、特にエラーらしき記述も見当たらなかったため、最後まで行ったと思ったのですが…
installing default gems: /virtual/ユーザー名/local/lib/ruby/gems/1.9.1 (cache, doc, gems, specifications)
rake 0.8.7
rdoc 2.5.8
minitest 1.6.0

補足日時:2012/03/01 01:52
    • good
    • 0

> /local/src/ruby-1.9.2-p180> which ruby19


> ./ruby19

これだと、コンパイルが成功した(らしい)ことしかわかりません。
別なディレクトリに移動してやってください。

この回答への補足

回答ありがとうございます。

>別なディレクトリに移動してやってください。

「which ruby19」を別ディレクトリで試したら、ノーリアクションでした。
ついでに、「ruby19 -v」も別ディレクトリで試したら、ノーリアクションでした。
ということは、そもそも、解凍したディレクトリ(ruby-1.9.2-p180)で、「which ruby19」とか「ruby19 -v」とかやっても全く無意味ということになるのでしょうか?

そうすると多分、現状は、解凍しただけで終わっている状況だと思うのですが、
「./configure --prefix=$HOME/local --program-suffix=19」打った後、
「config.status: creating Makefile」となっているので、
ここは多分問題ないと思います。

その後、makeしたときに、
「run with --debug for full backtrace」
「make: *** [rdoc] Error 1」
となるのですが、

一般的にmake時のエラーというのは、例えば複数個所エラーがあった場合、
最初のエラーが見つかった時点で、処理がストップしてしまうものでしょうか?

具体的には、
「make: *** [rdoc] Error 1」の意味としては、
・エラー内容は一つだけだった
・あくまでも最初のエラー内容を表示してるだけ
何れの可能性が高いかを知りたいです。


また、「run with --debug for full backtrace」は、どうやるのでしょうか?
試しに、「make --debug for full backtrace」
とやってみたのですが、うまくいきませんでした…

補足日時:2012/02/29 11:47
    • good
    • 0

./configure --prefix=$HOME/local --program-suffix=19


して、
make
make install
したのなら、
$HOME/local/bin/ruby19
$HOME/local/bin/gem19
などが出来ているはずです。

出来ていないとしたら、どこかで間違えているか、確認方法を間違えているかですが、
お書きの質問文や補足からではわかりません。

この回答への補足

回答ありがとうございます。

>$HOME/local/bin/ruby19
>$HOME/local/bin/gem19
>などが出来ているはずです。

確認したらありませんでした…

補足日時:2012/02/29 11:26
    • good
    • 0

> 今、試したら、


> > which ruby
> /virtual/ユーザー名/local/bin/ruby
> となりました。

「ruby19」を探すのにrubyでは探せません。
which ruby19
です。

gem19が正常にインストールできていたら、ruby19と同じ場所にあるはずです。
存在を確認するにはlsを使えばいいです。

この回答への補足

回答ありがとうございました。

/local/src/ruby-1.9.2-p180> which ruby19
./ruby19

lsでも存在確認しました。

が、同じ場所にgem19が見当たりません。
どうやら、gem19インストールに失敗しているみたいです。

gem19をインストールするに辺り、何か特別な「.bashrc」記述が必要なのでしょうか?
「RUBYLIB=」とか「GEM_HOME=」とか、gem19用の書き方があれば教えてください。

ちなみに、現状は、
> gem -v
1.3.6
/local/src/ruby-1.9.2-p180> which gem
/virtual/ユーザー名/local/bin/gem
です

補足日時:2012/02/28 09:28
    • good
    • 0

command not found だったら、gem19のインストールができてない、ってことは無いですか?


そのruby19が確かにそこでインストールしたものかwhich等で確認取れてますか?

> <インストールする際に打ったコマンド>
> /local/src/ruby-1.9.2-p180> ./configure --prefix=$HOME/local --program-suffix=19

だけだと、コンパイルの準備ができただけでインストールはされませんが。

RDocは関係無いでしょう。
辞書片手にでも翻訳してみればわかりますが
「すでにあるディレクトリに上書きしちゃうリスクは避けたいから、rdoc用には空のディレクトリを用意してね」
と言ってるだけです。

この回答への補足

回答ありがとうございます。

>command not found だったら、gem19のインストールができてない、ってことは無いですか?
有り得ます。どうやって、確認したら良いでしょうか?


>そのruby19が確かにそこでインストールしたものかwhich等で確認取れてますか?
確認取れてません。

今、試したら、
> which ruby
/virtual/ユーザー名/local/bin/ruby
となりました。

ちなみに、
「ruby -v」と打つと、
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-linux]
となります。(多分、こっちは以前入れたヤツです)


>だけだと、コンパイルの準備ができただけでインストールはされませんが。
その後、
「make」
「make install」と打ちました。


>RDocは関係無いでしょう。
ありがとうございます。


ネットを見ると、
>1.9にはgemが同梱されている
>このあと RubyGems も必要になりますが、Ruby1.9.2 からは デフォルトで入ってるのでインストールする必要はありません
のような記述もあったのですが、
そうだとすると、1.9を入れたら、自動的にgemも入るようになったのかな? と思ったのですが、そういうわけでもないのでしょうか?

補足日時:2012/02/28 00:57
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!