2009-05-26 46 views
7

我需要运行一堆ruby脚本,这些脚本是我在没有sudo访问权限的服务器上编写的。
在我自己的机器上,我使用'sudo gem install ..'安装了一堆宝石,并在我的代码中使用它们。
是否有任何机制可以让我使用这些宝石,而无需将它们正式安装到远程机?使用gem而不安装它

回答

6

你可以,但它很棘手。

首先,使用--install-dir选项来安装它们,即:

gem install gem_name --install-dir /some/directory/you/can/write/to 

第二,确保你有一个.gemrc文件在你的home目录下,看起来是这样的:

gemhome: /some/directory/you/can/write/to 
gempath: 
- /some/directory/you/can/write/to 
- /usr/local/lib/ruby/gems/1.8 

gemhome是寻找宝石时,宝石应该首先看。 gempath是寻找宝石时应该检查的所有路径。因此,在上面的.gemrc中,我告诉我的代码首先查看本地目录,如果找不到,请检查系统gem目录。第三,请注意,一些代码 - 即使是宝石中的代码 - 也可以假设宝石的位置。某些代码可能会以编程方式更改gempathgemhome。您可能需要在自己的代码中“修改”。

这里没有很多(读:无)如何做到这一点的文件 - 弄明白的最好方法是阅读附带的RubyGems的源测试。以下是我砍的rake任务宝石路径指向我的冻结版本Capistrano的的:

Gem.use_paths(Gem.dir, ["#{RAILS_ROOT}/vendor/gems"]) 
    Gem.refresh # picks up path changes 
+0

其实我做这一切的时候(我所有的宝石安装在〜 /.gem),并且还没有遇到任何行为不端的代码,也没有发现那么困难。但是YMMV。 – rampion 2009-05-27 00:06:36