首页 > 解决方案 > 为什么使用“bundle --deployment”而不是“bundle --without”?

问题描述

背景:不是问题

我有一个在 chruby 环境中同时在开发和生产中运行的项目,其中 ruby​​-install 以 root 身份安装,rubies 存储在 /opt/rubies 中。我很难(和很多人一样)让 nokogiri 将其本机扩展编译为捆绑包的一部分,但只要没有 binstub,它就可以像项目目录之外的任何 chruby 用户一样编译。这只是背景背景;这不是我的问题。

我目前的黑客

我发现当我将 binstubs 提交到我的项目时,会发生各种不良情况。到目前为止,我最好的解决方案似乎是:

# skip any bundled/binstub version of bundler
rm -rf ./bin
`which bundle` install --binstubs --without="development test"

这似乎工作得很好。Nokogiri 显然不是生产依赖项(耶!),并且 ./bin 目录被精简为生产所需的 gem。

问题:Bundler 部署标志会解决任何问题吗?

所以,问题来了:我在这里所做的,bundle install --deploy有或没有 binstubs 有什么区别?我知道它默认指向供应商/捆绑包而不是bin,但是文档并没有真正解释这种方法的优缺点(至少不是以我理解的方式)。

除了本身就很有价值的知识之外,我真的很想以一种可能跨系统(例如 RHEL6 和 RHEL7)工作的方式提供生产 gem,而无需重建本机扩展或剥离开发/测试生产机器上的宝石。

部署标志是答案吗?或者有没有更好的方法来为跨发行版项目提供带有本机扩展的 gem?

标签: rubyrubygemsbundlerrhel7rhel6

解决方案


推荐阅读