使用 RVM 本地 gemset 和使用 Bundle exec 之间有区别吗?

Is there a difference between using RVM local gemset and using Bundle exec?

ruby gem 集存在根本问题,其中像 rake xxxx 这样的命令可能会产生错误,因为命令可能使用 rake 的全球版本,而您的 gem 文件需要非常特定的版本。

我知道有两种方法可以缓解这种情况。

  1. 在 rake 和 rails 命令前使用 bundle exec。例如 bundle exec rake db:migrate 在前面添加这个确保命令是相对于当前包执行的,这意味着当你 运行 bundle install 时创建的包。

  2. 使用 RVM。使用 RVM 创建本地 gem 集的方法鲜为人知。首先,您为新应用程序创建目录,在本例中为 mkdir myappcd myapp,然后是 运行 rvm use ruby-2.3.0@myapp --ruby-version --create,用于创建本地 gem 集,其中没有任何内容。现在,您可以 运行 gem install railsrails new . 在您所在的文件夹中创建 rails myapp 及其专用的 gem 环境。

每次您自动 cd 到 myapp 目录时,额外的 RVM 将交换到右侧 gemset。

据我所知,这两种方法都有效,但是否存在您不使用上述方法之一的已知问题?

不使用 (2) 的一个原因:如果其他人想要使用您的代码,他们将不得不自己复制所有代码,而不是仅仅记住键入 bundle exec。他们可能以前从未见过 (2),所以这可能很重要。

如果您像我一样是 RVM 粉丝,我会为我开始的每个 rails 项目创建我自己的 gemset。这将使我更容易只使用 rakerails 命令,而无需每次都指定 bundle exec

在分享您的代码时请记住,一些开发人员可能正在使用 rbenv 或者可能根本没有使用 ruby 版本管理器。确保每个人都满意并使用相同版本的 ruby 的一种方法是在项目目录(.ruby-version.ruby-gemset)中提供两个附加文件并在你的项目。

.ruby-version 文件将包含您正在使用的 ruby 的版本,例如 2.4.1。请注意,这与 RVM 和 rbenv 兼容,并将切换到正确的 ruby 版本。

.ruby-gemset文件只被RVM识别;因此,切换到您为项目设置的正确 gemset。

这将使您的项目与使用 rbenv 的开发人员兼容,同时仍然让我们这些使用 RVM 的开发人员感到高兴:)

考虑到所有这些因素,现在你应该少关心凋灵人是否使用 bundle exec