我如何使用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中,这让我运行cap
, merb
, rails
等
更新你的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版本。 快速mv
或ln
将解决问题。
如果你确实需要使用多个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 ruby1.9.1-dev