【问题标题】:What are the benefits & drawbacks of installing things into the @global gemset in RVM?将东西安装到 RVM 中的 @global gemset 有哪些优点和缺点?
【发布时间】:2011-05-20 01:55:44
【问题描述】:

将东西安装到 RVM 中的 @global gemset 有哪些优点和缺点?


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

我们还假设每个应用程序都有它需要的额外 gem,我只希望在它的本地项目 gemset 中。

我会不会更好:

  1. Rails 3Rails 2 gem 安装到 @global gemset
    • ...并将项目本地 gemsets 用于他们的 gem...
  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
      • 在此处安装更多项目本地 gem...
    • rvm use --create ree@project2-on-rails2 && rvm gemset import rails2.gems
      • 在此处安装更多项目本地 gem...
  3. 完全不同的东西...

【问题讨论】:

    标签: ruby-on-rails ruby rubygems rvm


    【解决方案1】:

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


    Rails 3 和带有 Bundler 的 Rails 2 都会适当地设置它们的加载路径,这样它们就不会加载不在 Gemfile.lock 中的任何 gem(或任何 gem 的任何版本)。在服务器上遇到“宝石依赖问题”时,我真的没有任何方法。每次修改 Gemfile 时,务必在开发机器上运行 bundle install,并将 Gemfile.lock 签入源代码控制,如 Bundler homepage 中所述。

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

    1. 您的 shell 环境与您的应用程序环境相同(脚本在没有bundle exec 的情况下可以正常运行)。
    2. 您可以通过导航到 gemset 安装目录轻松浏览和 grep 浏览所有依赖项的源代码。
    3. 据 RVM 的作者说,它可以防止一些报告的“heisenbugs”。我遇到过类似的情况,其中 gem 可执行文件不可用,bundle exec 似乎没有帮助。

    我认为这些好处中的任何一个在服务器上都不是很有吸引力,所以如果您的目标是节省磁盘空间,我完全不确定您为什么要使用 gemset。

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

    【讨论】:

    • 在我的服务器环境中使用 RVM 的主要原因是能够在可能不同的 Ruby 版本上托管多个应用程序(如果需要,甚至可以降到补丁级别)。服务器需要足够灵活,以托管 N 个任意应用程序,无论它们是否使用 Bundler,或者是否需要特定环境才能运行。将其视为托管服务提供商环境,而不是开发服务器环境。由于备份的大小,磁盘空间值得关注。
    • 我无法评论使用 RVM 运行共享主机环境的有效性。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多