【问题标题】:How do I use gems with Ubuntu?如何在 Ubuntu 中使用 gem?
【发布时间】:2010-10-28 22:09:00
【问题描述】:

我最近升级到 Ubuntu 9.04,但在使用 gems 时遇到了问题。 我使用 apt-get 安装了 Ruby、Rubygems 和 Rails。 rails 命令确实有效。

然后我安装了 capistrano 和其他 gem,例如 heroku。 为此,我使用了以下命令:

sudo gem install XXX

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

bash: cap: command not found

其他gem命令也是如此。

为了使 gem 命令起作用,我有什么特别的事情要做吗?

【问题讨论】:

标签: ruby-on-rails ruby ubuntu rubygems capistrano


【解决方案1】:

mkmf 是 ruby​​1.9.1-dev 软件包的一部分。此包包含 Ruby 1.9.1 扩展库所需的头文件。您需要通过以下方式安装 ruby​​1.9.1-dev 软件包:

sudo apt-get install ruby​​1.9.1-dev

【讨论】:

    【解决方案2】:

    我的宝石在哪里?

    您可以使用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 等。

    更新你的路径

    如果由于某种原因您的可执行目录不在您的路径上(例如,如果它是 /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 提示符下。这将导致.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:~$ 
    

    我的宝石无法加载!

    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环境的输出:

      - 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 使其包含安装 gem 的两个目录?谢谢
    • 我这样做了:sudo ln -s /var/lib/gems/1.8/gems/capistrano-2.5.5/bin/cap /usr/local/bin/cap ln: 创建符号链接` /usr/local/bin/cap': 文件存在但它不起作用!它仍然得到: bash: cap: command not found 这是我的 $PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/游戏:/opt/real/RealPlayer:/var/lib/gems/1.8:/home/arthur/.gem/ruby/1.8
    • 现在可以了。我将路径更改为:/var/lib/gems/1.8/bin:/home/arthur/.gem/ruby/1.8/bin
    • 有没有办法将 EXECUTABLE_DIRECTORY 更改为更标准的内容,例如 /usr/bin 或 /usr/local/bin?将 /var/lib/gems/1.8/bin 添加到我的路径不太好,特别是因为它有一个版本号。
    • 当我想在系统级别更改它时,我必须在 /etc/environment 更改它
    【解决方案3】:

    正如@Chris 所说,您需要将 gems 环境添加到您的路径中。你可以这样做:

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

    【讨论】:

      【解决方案4】:

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

      我遇到的解决方案是将“/var/lib/gems/1.8/bin”添加到我的 $PATH 中,这样做: 导出 PATH=$PATH:/var/lib/gems/1.8/bin 但它没有被保存...我怎样才能保存我的路径?

      谢谢...

      解析:coloquei o export PATH=$PATH:/var/lib/gems/1.8/bin no ~/.bashrc! =]

      【讨论】:

      【解决方案5】:

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

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

      通过键入检查您的路径

      echo $PATH
      

      【讨论】:

      • 感谢您的回答这是 ~/.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
      • 你的 rails gem 工作吗?请将您的文件夹 ~/.gem/ruby/1.8/bin 添加到路径并尝试一下
      • 我问了一个问题以了解如何编辑 $PATH:stackoverflow.com/questions/910088/how-can-i-edit-the-path- on-linux
      猜你喜欢
      • 2015-06-01
      • 1970-01-01
      • 2015-06-05
      • 2011-03-08
      • 2013-03-06
      • 1970-01-01
      相关资源
      最近更新 更多