読者です 読者をやめる 読者になる 読者になる

彼女からは、おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

Snow Leopard の Rails が消えていたけど、おかげで gem search | list | query の違いがわかった

Ruby

ひさしぶりに MacSnow Leopard)の Rails を使おうとしたら下記のエラーが発生しました。

$ rails --version
Rails is not currently installed on this system. To get the latest version, simply type:

    $ sudo gem install rails

You can then rerun your "rails" command.

あれ?前まで使えていたんだけどナ。仕方なく対応したのメモしておきます。また対応の際に RugyGems の「gem query」コマンドが活躍してくれたので併せて書き留めておきます。よろしければ参考にしてください。

Snow LeopardRails が消えていたが、おかげで gem search | list |query の違いがわかった

  1. Rails はどこへ消えた?
  2. Rails インストール前の下調べ
  3. gem search | list | query の違いと使い分け
  4. Rails を、バージョンを指定してインストール

1. Rails はどこへ消えた?

この前まで rails は使えていたので、本当に無くなってしまったのか確認。

$ gem search --local rails

*** LOCAL GEMS ***
rails (2.3.5, 1.2.6)

有るじゃん。中身を表示させてみます。

$ which rails
/usr/bin/rails

$ cat /usr/bin/rails
#!/bin/sh
echo 'Rails is not currently installed on this system. To get the latest version, simply type:'
echo
echo '    $ sudo gem install rails'
echo
echo 'You can then rerun your "rails" command.'

ウケるw ただ単純にエラーメッセージを出力するだけになっていました。OS のアップデートのときになったのかどうだか...

2. Rails インストール前の下調べ

$ sudo gem install rails(してください)

と言われたけど、さすがにいきなりインストールするのは、こわい。どのバージョンがインストールされるか分からないですし。なので、下調べ。

$ gem search --remote rails

*** REMOTE GEMS ***
rails (3.2.0)
rails-3-settings (0.1.1)
rails-action-args (0.1.1)
...(他にもたくさん出た)

最新の Rails のバージョンが 3.2.0 であることは分かったのですが、訳あって 2.3系のものをインストールしたかったので、さあ困った(ちなみに使っている Ruby のバージョンは 1.8.7 です)

あぁ、そういえば、gem list というコマンドもありましたね。

$ gem list --remote rails

*** REMOTE GEMS ***
rails (3.2.0)
rails (3.2.0)
rails-3-settings (0.1.1)
rails-action-args (0.1.1)
...(他にもたくさん出た)

ん−、こうなると分かってはいたものの、解決しない...

3. gem search | list | query の違いと使い分け

大丈夫。僕には Google センセイがついている。

調べてみると、

gem search foo foo を含むパッケージを表示する
gem list foo foo からはじまるパッケージを表示する

という違いがあるそうです。

そして「gem query」コマンドなら、正規表現を使えるとか。これなら、下記のようにすれば rails のみを表示させることができます。

$ gem query --remote --name-matches "^rails$"

*** REMOTE GEMS ***
rails (3.2.0)

ふむふむ。で、本題に戻ると、--all オプションを付ければ、全バージョンを表示させることができます。

$ gem query --remote --all --name-matches "^rails$"

*** REMOTE GEMS ***
rails (3.2.0, 3.1.3, 3.1.2, 3.1.1, 3.1.0, 3.0.11, 3.0.10, 3.0.9, 3.0.8, 3.0.7, 3.0.6, 3.0.5, 3.0.4, 3.0.3, 3.0.2, 3.0.1, 3.0.0, 2.3.14, 2.3.12, 2.3.11, 2.3.10, 2.3.9, 2.3.8, 2.3.7, 2.3.6, 2.3.5, 2.3.4, 2.3.3, 2.3.2, 2.2.3, 2.2.2, 2.1.2, 2.1.1, 2.1.0, 2.0.5, 2.0.4, 2.0.2, 2.0.1, 2.0.0, 1.2.6, 1.2.5, 1.2.4, 1.2.3, 1.2.2, 1.2.1, 1.2.0, 1.1.6, 1.1.5, 1.1.4, 1.1.3, 1.1.2, 1.1.1, 1.1.0, 1.0.0, 0.14.4, 0.14.3, 0.14.2, 0.14.1, 0.13.1, 0.13.0, 0.12.1, 0.12.0, 0.11.1, 0.11.0, 0.10.1, 0.10.0, 0.9.5, 0.9.4.1, 0.9.4, 0.9.3, 0.9.2, 0.9.1, 0.9.0, 0.8.5, 0.8.0)

おー!いいねー!

4. Rails を、バージョンを指定してインストール

というわけで、2.3系の最新バージョン 2.3.14 をインストールしました。バージョンを指定するには --version オプションを付けます。

$ sudo gem install rails --version 2.3.14
Password:
Successfully installed activesupport-2.3.14
Successfully installed activerecord-2.3.14
Successfully installed rack-1.1.3
(中略)

$ rails --version
Rails 2.3.14

お、うまくいった!

おまけ - gem query コマンドのヘルプ

$ gem query --help
Usage: gem query [options]

  Options:
    -i, --[no-]installed             Check for installed gem
    -v, --version VERSION            Specify version of gem to query
    -n, --name-matches REGEXP        Name of gem(s) to query on matches the
                                     provided REGEXP
    -d, --[no-]details               Display detailed information of gem(s)
        --[no-]versions              Display only gem names
    -a, --all                        Display all gem versions
        --prerelease                 Display prerelease versions

  Local/Remote Options:
    -l, --local                      Restrict operations to the LOCAL domain
    -r, --remote                     Restrict operations to the REMOTE domain
    -b, --both                       Allow LOCAL and REMOTE operations
    -B, --bulk-threshold COUNT       Threshold for switching to bulk
                                     synchronization (default 1000)
        --source URL                 Use URL as the remote source for gems
    -p, --[no-]http-proxy [URL]      Use HTTP proxy for remote operations
    -u, --[no-]update-sources        Update local source cache

  Common Options:
    -h, --help                       Get help on this command
    -V, --[no-]verbose               Set the verbose level of output
    -q, --quiet                      Silence commands
        --config-file FILE           Use this config file instead of default
        --backtrace                  Show stack backtrace on errors
        --debug                      Turn on Ruby debugging

  Summary:
    Query gem information in local or remote repositories

  Defaults:
    --local --name-matches // --no-details --versions --no-installed