有什么好处&在RVM中将东西安装到@global gemset中的缺点?

时间:2011-05-20 01:55:44

标签: ruby-on-rails ruby rubygems rvm

有什么好处&在RVM中将内容安装到@global gemset中的缺点?


假设我想在同一台服务器上安装不同版本的rails。然后,我希望能够在同一台服务器上安装多个ruby应用程序,最少重复的文件以节省磁盘空间。但是,我仍然希望避免依赖性问题,宝石冲突问题和其他问题。

我们还假设每个应用都有额外的宝石,我只需要它的本地项目宝石集。

我会变得更好:

  1. Rails 3 Rails 2 宝石同时安装到@global gemset中
    • ...并使用项目本地宝石为他们的宝石......
  2. Rails 3 安装到@rails3 gemset中,将 Rails 2 安装到@rails2集合中...然后克隆我需要的每个项目?
    例如:
    • rvm use ree@rails3 && rvm gemset export rails3.gems
    • rvm use ree@rails2 && rvm gemset export rails2.gems
    • rvm use --create ree@project1-on-rails3 && rvm gemset import rails3.gems
      • 在这里安装更多项目本地宝石......
    • rvm use --create ree@project2-on-rails2 && rvm gemset import rails2.gems
      • 在这里安装更多项目本地宝石......
  3. 其他完全......

1 个答案:

答案 0 :(得分:3)

注意:假设您使用Bundler来管理您的gem依赖项,我写了整个响应。我意识到有些人没有,你在你的问题中没有提到Bundler。如果你没有使用Bundler,我会指出它可能是节省磁盘空间的最佳方法(只有你bundle install --system时才这样!)。如果您使用导出的gemsets来管理依赖项,我认为您的方案听起来很合理,但我没有经验。


Rails 3和带有Bundler的Rails 2都会适当地设置它们的加载路径,这样它们就不会加载任何不在Gemfile.lock中的宝石(或任何版本的任何宝石)。我在服务器上遇到“gem依赖问题”并没有任何经验。每当您修改bundle install时,在开发计算机上运行Gemfile,并检查Gemfile.lock到源代码管理中是很重要的,如Bundler homepage所述。< / p>

我花了一些时间深入研究gemsets的使用案例in January。我发现为每个项目使用单独的gemsets的原因是:

  1. 您的shell环境与您的应用程序环境相同(脚本在没有bundle exec的情况下正确运行)。
  2. 您可以通过导航到gemset安装目录,轻松浏览并查看所有依赖项的源代码。
  3. 根据RVM的作者,
  4. 它阻止了一些报道的“heisenbugs”。我经历过这样的事情,其中​​没有可用的宝石可执行文件而且bundle exec似乎没有帮助。
  5. 我不认为这些好处在服务器上是非常引人注目的,所以如果你的目标是节省磁盘空间,我不知道你为什么要使用gemsets。

    实际上,我在服务器上使用rvm的唯一原因是因为它是从源代码构建ruby的一种便捷方式(我们需要一个原生包管理器中没有的版本)。