如何在Ubuntu中使用gems?

77

我最近升级到Ubuntu 9.04,使用gems时出现了问题。 我使用apt-get安装了Ruby、Rubygems和Rails。 rails命令是可以运行的。

然后我安装了Capistrano和其他gems,比如Heroku。 为此,我使用了以下命令:

sudo gem install XXX

当我想使用cap命令时它没有起作用:

bash: cap: command not found

其他的 gem 命令也是一样的。

我需要做特别的事情才能让 gem 命令生效吗?


这个问题是否更适合在http://superuser.com/上提问? - Thiago Diniz
@ThiagoDiniz 还是在 askubuntu.com 上? - Eliran Malka
5个回答

139

我的宝石在哪里?

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

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目录中。
您还可以看到可执行文件存储在EXECUTABLE DIRECTORY中,这种情况下是/usr/bin
因为/usr/bin在我的路径中,这使我能够运行capmerbrails等。
更新您的PATH
如果由于某些原因您的EXECUTABLE DIRECTORY不在您的路径上(例如,如果它是/var/lib/gems/1.8/bin),则需要更新您的PATH变量。
假设您正在使用bash shell。您可以通过在shell提示符处键入以下内容来快速为当前会话执行此操作;假装您要将/var/lib/gems/1.8/bin添加到路径中:
export PATH=$PATH:/var/lib/gems/1.8/bin

按回车键。这将把新目录附加到当前路径的末尾。请注意$PATH/var/lib/gems/1.8/bin之间的冒号。

要为所有会话设置值,您需要编辑您的.profile.bashrc文件,并在文件末尾添加相同的行。我通常编辑我的.bashrc文件,没有其他原因,只是因为我一直这样做。完成后,保存文件,然后通过输入以下内容刷新您的环境:

bash

在Shell提示符下,输入source ~/.bashrc命令可以重新读取.bashrc文件。

您可以随时通过输入echo $PATH来检查当前$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无法加载!

"Ruby gems won't load even though installed" 强调了在使用多个不同版本的Ruby时常见的问题;有时Gem环境和Gem路径会失去同步:

rb(main):003:0> Gem.path

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

任何 Ruby 进程都只在一个地方查找它的 Gems。
:~/$ 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 environment 的输出:
  - GEM PATHS:
     - /opt/ruby1.9/lib/ruby/gems/1.9.1

这不是与Gem.path返回的路径相同:

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

很难说是什么原因导致lib/ruby变成了lib/ruby1.9,但最有可能的是开发人员正在使用多个Ruby版本。使用快速的mvln命令可以解决这个问题。

如果确实需要使用多个Ruby版本,则应该使用rvm


我该如何编辑我的$PATH,以便它包括安装gems的两个目录?谢谢。 - 0x26res
我已经这样做了: sudo ln -s /var/lib/gems/1.8/gems/capistrano-2.5.5/bin/cap /usr/local/bin/capln: 创建符号链接 `/usr/local/bin/cap':文件已存在 但它不起作用! 仍然会得到: bash: cap: 找不到命令这是我的$PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/opt/real/RealPlayer:/var/lib/gems/1.8:/home/arthur/.gem/ruby/1.8 - 0x26res
现在它可用了。我将路径更改为: /var/lib/gems/1.8/bin:/home/arthur/.gem/ruby/1.8/bin - 0x26res
有没有办法将EXECUTABLE_DIRECTORY更改为更标准的路径,例如/usr/bin或/usr/local/bin?将/var/lib/gems/1.8/bin添加到我的路径中不太好,特别是因为它包含版本号。 - Kief
当我想在系统级别上更改时,我必须在/etc/environment上进行更改。 - Ev Dolzhenko
输入bash并不会刷新您的环境,它只是在当前终端中打开一个新的 shell。 (您甚至可以使用Ctrl-D返回到原始 shell。)新环境确实包括来自更新的.bashrc文件的信息,但您真正需要的是通过源代码文件来更新当前 shell:$ . ~/.bashrc。(您也可以使用source命令,但.更简短。) - mhartl

5

正如@Chris所指出的,您需要将gems环境添加到您的路径中。您可以通过以下方式实现:

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

3

存储宝石的文件夹必须在您的PATH中,例如我的路径是:

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

通过输入以下命令检查您的路径:

echo $PATH

1
感谢您的回答。以下是~/.gem/ruby/1.8/bin的内容: activerecord-2.3.2 activesupport-2.3.2 heroku-0.9.1 json-1.1.6 rails-2.3.2当我从我的主文件夹~安装capistrano时,它不会进入此文件夹。 此外,heroku gem在正确的文件夹中,但是heroku命令无法使用。此外,$PATH命令返回的内容如下: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games - 0x26res
你的 Rails 宝石(gem)可用吗?请将您的文件夹 ~/.gem/ruby/1.8/bin 添加到路径中并尝试。 - victor hugo
我问了一个问题,以便知道如何编辑Linux上的$PATH: http://stackoverflow.com/questions/910088/how-can-i-edit-the-path-on-linux - 0x26res

1

在安装rubygems时,我遇到了问题,现在在ubuntu 9.04中。我注意到在“gem environment”中,可执行目录是“/var/lib/gems/1.8/bin”,而不是“/usr/bin”...这是rubygems还是ubuntu 9.04的问题?

我遇到的解决方案是将“/var/lib/gems/1.8/bin”添加到我的$PATH中,方法如下: export PATH=$PATH:/var/lib/gems/1.8/bin 但它没有被保存...我该如何保存我的路径?

谢谢...

我解决了:将export PATH=$PATH:/var/lib/gems/1.8/bin添加到~/.bashrc中!=]


2
为了保存路径,请查看我提出的另一个问题: http://stackoverflow.com/questions/910088/how-can-i-edit-the-path-on-linux - 0x26res

0

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

sudo apt-get install ruby1.9.1-dev


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接