【发布时间】:2012-06-18 16:03:03
【问题描述】:
我使用RVM 管理我的本地Ruby 安装,使用Bundler 管理应用程序依赖关系。
有些人建议为每个应用程序使用单独的 RVM gemset,而有些人似乎认为没有必要。
那么,当我使用 Bundler 时,为每个应用程序使用单独的 RVM gemset 有什么好处?不这样做有什么风险?
【问题讨论】:
我使用RVM 管理我的本地Ruby 安装,使用Bundler 管理应用程序依赖关系。
有些人建议为每个应用程序使用单独的 RVM gemset,而有些人似乎认为没有必要。
那么,当我使用 Bundler 时,为每个应用程序使用单独的 RVM gemset 有什么好处?不这样做有什么风险?
【问题讨论】:
除了 bundler 之外,我还使用 gemsets,原因如下:
bundle exec(此功能已被 binstubs 淘汰)可能有更多使用它们的理由,但我通常喜欢沙盒的想法!
【讨论】:
bundle exec 一样慢,与我的 gem rubygems-bundler 相比,它们需要你付出更多的努力,它只能使用正常流程工作.
我发现,如果您使用的是 rails 2,则拥有 rvm 很有用。如果您需要处理具有旧代码的应用程序,RVM 非常有用。 Rails 2 不使用 Gemfile,所以 bundle exec 不起作用。 RVM 可以轻松地为该项目保持 gem 版本的正确性,并且您可以切换回新版本的 rails 并使用 Gemfile 指定版本。如果您有多个应用程序使用不同的 gem 版本,但使用相同版本的 ruby,则可以方便地共享大部分 gem,并在 Gemfile 中指定它们的不同之处。
我认为这取决于大小写。如果您发现两个应用程序之间存在大量版本问题,并且不断修改 Gemfile 以保持它们的正确性很烦人,那么请使用单独的 gemset。如果有足够的共同点,那么使用相同的 gemset 可能是有意义的
【讨论】:
RVM gemsets 允许您在不加载 bundler 的情况下分离 gems - 这更快,加载 gems 会更简单。
您应该使用 gemsets 将项目与您的 helper gems 分开(例如 gist)。
但如果您认为 gemset 对您没有帮助,您可以告诉 RVM 完全忽略 gemset:
echo "export rvm_ignore_gemsets_flag=1" >> ~/.rvmrc
【讨论】:
我还可以向您推荐位于 fast/globalcache_comment_test.sh 的 rvm-test 形式的“globalcache”文档以及您的项目的 Gemfile。
这也将减少到 rubygems.org 的网络流量。全局初始加载,无法承受。
【讨论】: