Ruby相当于virtualenv?
有没有类似的Python实用程序virtualenv ?
基本上它允许你将Python包安装到一个沙盒环境中,所以easy_install django
不会进入你的系统范围的站点包目录,它会进入virtualenv创build的目录。
例如:
$ virtualenv test New python executable in test/bin/python Installing setuptools...cd .........done. $ cd test/ $ source bin/activate (test)$ easy_install tvnamer Searching for tvnamer Best match: tvnamer 0.5.1 Processing tvnamer-0.5.1-py2.5.egg Adding tvnamer 0.5.1 to easy-install.pth file Installing tvnamer script to /Users/dbr/test/bin Using /Library/Python/2.5/site-packages/tvnamer-0.5.1-py2.5.egg Processing dependencies for tvnamer Finished processing dependencies for tvnamer (test)$ which tvnamer /Users/dbr/test/bin/tvnamer
RubyGems有这样的东西吗?
RVM更接近virtualenv的工作原理,因为它可以让你的沙箱不同的ruby版本和他们的gem,等等。
无论是沙箱,RVM还是rbenv都不pipe理应用程序的gem依赖项的版本。 这个工具是捆绑软件 。
- 使用Gemfile作为应用程序的依赖声明
- 使用
bundle install
将这些依赖项的显式版本安装到一个孤立的位置 - 使用
bundle exec
来运行你的应用程序
我想你会喜欢沙箱 。
似乎没有人提到rbenv 。
如果您只需要将gem安装为非root用户,请尝试设置GEM_HOME
环境variables。 然后运行gem
。
例如:
$ export GEM_HOME=$HOME/local/gems $ gem install rhc
我会提到我使用Bundler(我使用RVM-RVM来pipe理ruby和一组默认的全局gem,Bundler来处理项目特定的gem)
bundler install --binstubs --path vendor
在项目的根目录下运行这个命令会安装从Gemfile中列出的gems,将lib放在./vendor
,而./bin
所有可执行文件都require
s(如果你使用bundle console
或者Bundler需要)这些exes和libs。
为我工作。
我build议direnv 。 它是一个shell的环境切换器。
在每次提示之前,它检查当前目录和父目录中是否存在“.envrc”文件。 如果文件存在(和授权),它被加载到bash子shell中,然后所有导出的variables被direnv捕获,然后使得当前shell可用。
这里是如何使用 ruby-install的direnv
+ ruby-install
将此添加到~/.direnvrc
use_ruby() { local ruby_root=$HOME/.rubies/$1 load_prefix "$ruby_root" layout_ruby }
安装ruby-install( brew install ruby-install
)并安装一堆ruby。
ruby-install ruby 1.9.3 ruby-install ruby 2.0.0 ruby-install ruby 2.2.0
然后为了方便而创build一对符号链接:
ln -s .rubies/1.9 ruby-1.9.3-p* ln -s .rubies/2.0 ruby-2.0.0 ln -s .rubies/2.2 ruby-2.2.0
最后在任何项目的.envrc
:
use ruby 2.0
这将把所有的gem放在项目的.direnv/ruby
目录下(使开启的gem更容易)。 bundler会把包装器的二进制文件.direnv/bin
(不需要更多的bundle exec
!)。
+ rbenv
通过在任何.envrc
文件中添加use rbenv
命令,也可以使用rbenv。 这将激活rbenv,反过来将ruby包装在PATH。
请注意,不需要在.bashrc或.zshrc中安装rbenv以使其工作。
+ RVM
下面是我在ruby项目中使用的最复杂的.envrc:
rvm use 1.8.7 layout ruby PATH_add .direnv/bundler-bin
rvm用来为你select正确的ruby版本
布局命令自动设置一些常用的环境variables。 现在只有ruby的布局存在。 它所做的是设置GEM_HOME环境variables,它的bin目录到你的path。 因为它取决于ruby版本,所以一定要在“rvm”之后调用它。 由于每个ruby布局目录都有自己的GEM_HOME,所以不需要使用rvm的gemset。
PATH_add提前并扩展给定的相对path。 在这种情况下,我使用它来从我自己的bin脚本中分离bundler binstub,并使用bundle install --binstubs .direnv/bundler-bin
如果你想知道这些命令到底是做什么的,那么现在:cat direnv stdlib
| 减