我如何使用Ubuntu的gem?

我最近升级到Ubuntu 9.04,我有使用gem的问题。 我使用apt-get安装了Ruby,Rubygems和Rails。 rails命令可以工作。

然后我安装了capistrano和其他gem,如heroku。 为了做到这一点,我使用了命令:

 sudo gem install XXX 

当我想使用cap命令时,它不起作用:

 bash: cap: command not found 

这与其他gem命令是一样的。

我有什么特别要做的,以便gem命令的工作?

我的gem在哪里?

您可以使用gem environment命令查找您的gem的存储位置。 例如:

 chris@chris-laptop:~$ gem environment RubyGems Environment: - RUBYGEMS VERSION: 1.3.2 - RUBY VERSION: 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] - INSTALLATION DIRECTORY: /usr/lib/ruby/gems/1.8 - RUBY EXECUTABLE: /usr/bin/ruby1.8 - EXECUTABLE DIRECTORY: /usr/bin - RUBYGEMS PLATFORMS: - ruby - x86-linux - GEM PATHS: - /usr/lib/ruby/gems/1.8 - /home/chris/.gem/ruby/1.8 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: 

如果您查看“GEM PATHS:”部分,您可以看到gem可以存储在笔记本电脑的两个位置: /usr/lib/ruby/gems/1.8或我的主目录的.gem目录中。

您还可以看到,可执行文件存储在可执行文件目录中,在这种情况下是/usr/bin

因为/usr/bin在我的path中,这让我运行capmerbrails

更新你的PATH

如果由于某种原因,你的EXECUTABLE DIRECTORY不在你的path上(例如,如果它是/var/lib/gems/1.8/bin),那么你需要更新PATHvariables。

假设你正在使用bash shell。 您可以通过在shell提示符处input以下内容来快速完成当前会话: 让我们假装你想将/var/lib/gems/1.8/bin添加到path中:

 export PATH=$PATH:/var/lib/gems/1.8/bin 

并按返回。 将新目录附加到当前path的末尾。 注意$PATH/var/lib/gems/1.8/bin之间的冒号

要设置所有会话的值,您将需要编辑.profile.bashrc文件,并将相同的行添加到文件末尾。 我通常编辑我的.bashrc文件没有任何理由,除了这是我一直以来做的。 完成后,保存该文件,然后键入以下命令刷新环境:

 bash 

在shell提示符下。 这将导致.bashrc重新读取。

在任何时候,您都可以通过键入来检查$PATH的当前值

 echo $PATH 

在shell提示符下。

下面是我自己的一个服务器的示例,我的用户名是“chris”,机器名是“chris-laptop”:

 chris@chris-laptop:~$ chris@chris-laptop:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games chris@chris-laptop:~$ chris@chris-laptop:~$ export PATH=$PATH:/var/lib/gems/1.8/bin chris@chris-laptop:~$ chris@chris-laptop:~$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/var/lib/gems/1.8/bin chris@chris-laptop:~$ 

我的gem不会加载!

“ 即使安装了Rubygem也不会加载 ”使用多个不同版本的Ruby强调了一个常见的问题; 有时Gem环境和Gempath不同步:

 rb(main):003:0> Gem.path => ["/opt/ruby1.9/lib/ruby1.9/gems/1.9.1"] irb(main):004:0> exit 

这里的任何Ruby进程只在一个地方寻找它的gem。

 :~/$ gem env RubyGems Environment: - RUBYGEMS VERSION: 1.3.7 - RUBY VERSION: 1.9.1 (2009-05-12 patchlevel 129) [x86_64-linux] - INSTALLATION DIRECTORY: /opt/ruby1.9/lib/ruby/gems/1.9.1 - RUBY EXECUTABLE: /opt/ruby1.9/bin/ruby1.9 - EXECUTABLE DIRECTORY: /opt/ruby1.9/bin - RUBYGEMS PLATFORMS: - ruby - x86_64-linux - GEM PATHS: - /opt/ruby1.9/lib/ruby/gems/1.9.1 - /home/mark/.gem/ruby/1.9.1 - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :benchmark => false - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - http://rubygems.org/ 

仔细看看gem环境的输出:

  - GEM PATHS: - /opt/ruby1.9/lib/ruby/gems/1.9.1 

这与Gem.path返回的path不同:

 ["/opt/ruby1.9/lib/ruby1.9/gems/1.9.1"] 

很难说lib/ruby到底是由lib/ruby1.9改变到什么lib/ruby1.9但很可能是开发人员使用了多个Ruby版本。 快速mvln将解决问题。

如果你确实需要使用多个Ruby版本,那么你真的应该使用rvm 。

如@Chris所述,您需要将gem环境添加到您的path中。 你可以这样做:

 echo 'export PATH=$PATH:/var/lib/gems/1.8/bin' | tee --append ~/.bashrc 

存储gem的文件夹必须位于PATH上,例如:

/home/victor/.gem/ruby/1.8/bin

通过input查看您的path

 echo $PATH 

它在安装rubygems的时候注意到,现在在Ubuntu 9.04中,我有这个问题。 我注意到,在“gem环境”的可执行文件目录是“/var/lib/gems/1.8/bin”,而不是“/ usr / bin”…这是rubygems或与Ubuntu 9.04的问题?

我遇到的解决scheme是添加“/var/lib/gems/1.8/bin”到我的$ PATH这样做:export PATH = $ PATH:/var/lib/gems/1.8/bin但它不保存…我怎么能救我的路?

谢谢…

parsing:coloquei o export PATH = $ PATH:/var/lib/gems/1.8/bin no〜/ .bashrc! =]

mkmf是ruby1.9.1-dev包的一部分。 该软件包包含Ruby 1.9.1扩展库所需的头文件。 您需要通过执行以下操作来安装ruby1.9.1-dev软件包:

sudo apt-get install ruby​​1.9.1-dev