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

时间:2016-03-07 13:54:59

标签: ruby rvm bundler

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

我知道有两种方法可以缓解这个问题。

  1. 在rake and rails命令前使用bundle exec。例如bundle exec rake db:migrate在前面添​​加此命令可确保执行与当前包相关的命令,这意味着在运行bundle install时创建的包。

  2. 使用RVM。使用RVM创建本地gemset的方法较少。首先,在这种情况下为新应用创建目录mkdir myappcd myapp然后运行rvm use ruby-2.3.0@myapp --ruby-version --create以创建没有任何内容的本地gem集。现在,您可以运行gem install railsrails new .来创建rails myapp,并使用您所在文件夹中的专用gem环境。

  3. 每次你自动cd到myapp目录时,额外的RVM都会交换到正确的gemset。

    至于我理解这两种方法都有效,但是为什么你不使用上述方法之一有任何已知问题?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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

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

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

考虑到所有这些注意事项,现在你应该更少关注人们是否使用bundle exec了!