【问题标题】:Bundler: ensure production gems installed system-wide?Bundler:确保在系统范围内安装生产 gem?
【发布时间】:2016-09-01 18:10:03
【问题描述】:

我的 git 存储库中有一个 ruby​​ 程序,供团队使用。它直接从 git repo 中执行。我不希望所有团队成员都必须处理 gem,所以我希望在系统范围内(在共享磁盘上)安装生产级 gem。 Bundler 将使用 git 控制的 Gemfile.lock 来决定要拾取哪些 gem。

为了开发,我经常使用 --user-install 安装 gem。

问题:我可能会不小心推送使用仅由用户安装的 gem 的更改,这会在其他团队成员拉动并尝试运行时破坏他们。

如何确保在系统范围内安装所有非开发 gem?

是否有我可以运行的捆绑命令来检测这一点并引发错误?或者我能以某种方式让我的黄瓜测试只使用系统 gem 运行吗?

【问题讨论】:

  • 我还不确定我是否了解您的团队成员设置。谁使用哪台计算机与哪个共享或不共享存储库?对我来说,描述有点“闻起来”,好像有更好的方法来做到这一点(考虑过网络应用程序?)关于你的问题,我认为@Ginty 的答案是你所需要的。
  • @Felix,每个团队成员都有自己的 repo 克隆,其中包含 ruby​​ 程序。但我不希望每个团队成员每次添加新的第三方 gem 时都必须运行 bundler。

标签: ruby bundler


【解决方案1】:

没有办法让 Bundler 使用系统 gem,但我认为应该有:https://github.com/bundler/bundler/issues/1964

对您来说最直接的解决方案是将 gem 打包到您的 Git 存储库中:http://bundler.io/v1.12/bundle_package.html。 在您希望用户能够运行您的应用程序而无需在本地安装 gems 的情况下,打包程序团队确实建议应该这样运行它。

第二个选项是让您使用 --path 选项捆绑安装并将其指向所有用户可见的共享位置。这个选项会被记住,所以将 .bundle 检查到你的 Git 存储库中,然后你的用户将使用相同的配置并在运行 bundle 时引用相同的位置。由于您已经在其中安装了所有 gem,因此它们不会有任何问题。

【讨论】:

  • 签入 .bundle/config 听起来像是灾难的秘诀。当我在自己的仓库中开发并在我的主目录中安装 gems 时,我可能会无意中提交我自己的本地 .bundle/config。
  • 我最终运行 bundle package 并提交了包含 gem 的 vendor/cache 目录。然后每个用户运行 bundle install --deployment --without development --local --standalone 为他们的本地 repo 解压缩这些 gem。决定完全不依赖系统 gem,因为我找不到可靠的方法来做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多