是否有Ruby gem的版本管理器?

时间:2014-11-03 17:22:20

标签: ruby-on-rails ruby ruby-on-rails-3 gem rubygems

我是一名新的Rails开发人员。我最近参加了一个关于Rails的课程,现在我试图确保通过自我分配推动我的项目来提高自己的技能。我现在要做的一件事是使用Radiant CMS来构建一个博客站点。但是,我在下载Radiant gem时遇到了一些问题。这就是我的所作所为:

  1. 当我第一次尝试gem install radiant时,它安装了大部分必需的宝石,但随后又发出警告(遗憾的是我没有逐字保存),这就是:

    railties executable will overwrite rails executable. Overwrite? Y/n
    
  2. 愚蠢的是,我选择了" Y"。我一做到了,就通过编写rails new testproject测试了我的rails gem,但它失败了。所以我重新跑了gem install rails,告诉它要覆盖"铁路"可执行文件,然后运行gem uninstall radiant以摆脱核心辐射宝石(虽然我仍然有铁路)。

  3. 现在,我的Rails gem已修复,我可以创建新的Rails项目而不会出现问题。但是,我重新安装了Radiant gem,安装后,每次运行时都无法创建项目。

  4. 我很确定我打破了一些东西,但我并不十分关心这一点。我所担心的是,Radiant宝石似乎与Rails宝石并没有很好地共存,这引出了我的问题:

    有没有办法创建单独的,自包含的ruby gem环境,当前的Ruby版本只会在指定的环境中使用gem?

    从本质上讲,我正在寻找rbenv所做的事情,但是对于宝石而不是Ruby版本的集合。

    目前,我安装了Homebrew,我使用rbenv作为我的版本管理器。到目前为止,我能找到的所有内容都是关于逐个项目地管理宝石的。我正在寻找能够管理和保持创建项目的宝石的东西。因此,例如,environment_a包含railshttparty,而environment_b包含radiantrailties

    我不会完全消除rbenv和我所有的宝石,也可以从头开始,这样就有可能(以及成为菜鸟的优势)。

5 个答案:

答案 0 :(得分:5)

您应该检查bundler,因为它完全符合您的需要。

答案 1 :(得分:2)

是:rbenv-gemset

我认为它比RVM更好,因为它的侵入性更小。

我一直在使用rbenv和rbenv-gemset大约2年,并且发现它易于使用。它可以很容易地将Ruby和gemset封装在一个项目中,在一台机器上运行多个Rubies和gemset,并将项目移动到另一台机器上。

您可以使用ruby-build安装其他版本的Ruby。安装最新版本的Ruby有一个技巧。

您可能需要查看How do I ensure ruby gems are installed in right place to be executed by bundler?它有一些相关的(并且希望有用)信息。

答案 2 :(得分:1)

是的,有。

我认为它叫做 RVM

就像 Chris Heald 所说,您可以查看有关它的更多信息@ rvm.io/gemsets/basics

答案 3 :(得分:1)

虽然RVM和rbenv都具有此功能,但我建议使用bundler进行版本控制。

答案 4 :(得分:0)

你问:“有没有办法创建单独的,自包含的ruby gem环境,当前的Ruby版本只会在指定环境中使用gem?”

使用 rvm 执行此操作的最佳方法是进入项目目录,然后运行:

rvm use ruby-x.y.z@your_project_name --ruby-version --create

其中x.y.z是该项目的Ruby版本,之前已安装 rvm install x.y.z

例如,要将最新的Ruby版本与名为 acme 的项目一起使用,您将使用

rvm install 2.3.1

然后

rvm use ruby-2.3.1@acme --ruby-version --create

此命令将在项目directoty中创建两个文件: .ruby-version .ruby-gemset

文件 .ruby-version 只包含版本号。文件 .ruby-gemset 只包含gemset的名称,与项目名称相同(极致)。

rvm 非常智能,可以检查这些文件并使用指定的gemset,它位于〜/ .rvm / gems / ruby​​-2.3.1 @ acme ,您的宝石将位于〜/ .rvm / gems / ruby​​-2.3.1 @ acme / gems

有些观点:

1)使用项目名称作为gemset名称不是必需的。你可以使用任何你喜欢的东西。它是使用项目名称的标准,但不是强制性的。

2)rbenv可能有办法做同样的事情,但我不使用rbenv而且真的不知道该怎么做。

希望这个答案有所帮助。