9 Jun 2010

Gemへパスが通らない!

レベル低くてすいません。Gemにパスが通らないって怒られる場合の原因と対処です。皆やらないと思うんだけど、僕はやる。

1, rubygemのインストール時にsudo してない。

$ gem install cassandra
WARNING: Installing to ~/.gem since /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8 and /opt/ruby-enterprise-1.8.7/bin aren't both writable.

$ gem list -ld cassandra

*** LOCAL GEMS ***

cassandra (0.8.2)
Installed at: /home/suzukimilanpaak/.gem/ruby/1.8

これで、まれにrailsのrequireから参照が通らない場合があります。


- 対処
sudo する。

2, rubygems試しに動かすためのサンプルファイル名に対象のrubygemと同じファイル名を使ってる。
 例、cassandra.rb

require 'rubygems'
require 'cassandra'
include Cassandra::Constants

#=>
$ ruby cassandra.rb
./cassandra.rb:3: uninitialized constant Cassandra (NameError)
from /opt/ruby-enterprise-1.8.7/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
from /opt/ruby-enterprise-1.8.7/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
from cassandra.rb:2


ruby コマンドがローカルのcassandra.rbを最初に見つけてしまっています。


- 対処

ファイル名を変える
cassandra.rb => sample_cassandra.rb



3, これらとは別に、rubygems内のコマンドがありパスが通っておらず実行できない場合があります。

$ spork
No command 'spork' found,
did you mean: Command 'spork' from package 'libspork-perl' (universe)
spork: command not found

$ gem list -ld spork

*** LOCAL GEMS ***

spork (0.8.3)
Installed at (0.8.3): /opt/ruby-enterprise-1.8.7/lib/ruby/gems/1.8

$ echo $PATH
/home/suzukimilanpaak/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:



- 対処
.profileか.bashrcにPATHを追加する。

.profile ログイン時に一度設定すればいいもの
.bashrc bashを起動するたびに設定する必要のあるもの


#.profileを編集してパスを追加する

# if running bash
if [ -n "$BASH_VERSION" ]; then
#この行を追加
PATH=$PATH:/opt/ruby-enterprise-1.8.7/bin:/home/suzukimilanpaak/.gem/ruby/1.8/bin:
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi

.profileを再読み込みして、sporkを実行(すると動くはず)。
$ source ~/.profile

$ spork


.