【问题标题】:RVM system-wide gemsetsRVM 系统范围的 gemsets
【发布时间】:2014-01-14 00:05:36
【问题描述】:

我需要在单个服务器上托管不同的 Ruby 应用程序。应用程序具有相互不兼容的 ruby​​ 版本和 gem。有没有办法在系统范围模式下安装 RVM 并且 具有也是系统范围的 gemset,并且不绑定到特定用户及其 $HOME 目录?或者有没有更好的方法在同一台机器上托管不同的 Ruby 应用程序?

【问题讨论】:

标签: ruby rvm production-environment


【解决方案1】:

使用mixed mode installation of RVM 基本上可以安装系统,并且每个应该拥有自己的gemset 的用户都可以运行:

rvm user gemsets

【讨论】:

  • 我在发布问题之前尝试过,但没有成功。以混合模式安装 rvm 的用户没有 RVM 系统范围的目录(由 RVM 安装创建)的访问权限,因此所有 RVM 命令都会失败。 rvmsudo 而不是 rvm 也因一些晦涩的错误而失败。唯一没有返回错误消息的是sudo rvm,但它在文件系统根...(/gems 等)中创建了RVM 目录。也许这是一个 RVM 错误,但我永远不会再将 RVM 用于生产。
  • 您不能将系统用户与混合模式用户混合,您需要有单独的用户来管理(安装)rubies 和单独的用户来管理应用程序,如果您希望所有用户都能够安装 rubies 然后您需要将这些用户添加到 rvm 组,他们都将能够更改所有 rubies 和 gemsets
  • 我会接受您的回答,因为它以我所说的方式回答了问题。尽管这不是我最终做的事情,但它会帮助那些决定使用 RVM 的人。
【解决方案2】:

由于 RVM 在系统范围模式下存在许多问题(rvmsudo 无法正常工作,RVM 在文件系统根目录中创建目录等),我决定采用vendor/bundle 路线。

我使用我的发行版的包管理器安装了带有最新补丁的 ruby​​ 1.9.3,然后运行gem install bundler --no-user-install,它在系统范围内安装了 bundler gem。

然后我在每个应用程序的目录bundle install --path vendor/bundle --without development test 中运行,它在应用程序的vendor/bundle 目录中安装了所需的生产gem。如果有任何 rake 任务或普通 ruby​​ 文件作为应用程序设置的一部分运行,那么这些文件的前缀为 bundle exec ...(在运行命令时使用来自 vendor/bundle 的 gem 环境)。

最后,所有应用程序都可以直接运行,无需任何事先的环境设置或 RVM 魔法,并且每个应用程序都有单独的 gem。

【讨论】:

  • 投了反对票,因为您没有阅读 rvm 文档并试图在 rvm 上做一些随机的事情,将您的用户添加到 rvm 组应该足够了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多