2016-03-07 88 views
2

ruby​​ gem set存在一个基本问题,像rake xxxx这样的命令可能会产生错误,因为命令可能使用rake的全局版本,而gemfile需要非常特定的版本。使用RVM本地gemset和使用Bundle exec是否有区别?

我知道2种方法来缓解这种情况。

  1. 在rake和rails命令前面使用bundle exec。例如bundle exec rake db:migrate在前面添加此命令可以确保命令是以当前捆绑包的形式执行的,即当您运行bundle install时创建的捆绑包。

  2. 使用RVM。使用RVM创建本地gemset的方式比较少见。首先,在这种情况下,为您的新应用创建目录mkdir myappcd myapp,然后运行rvm use [email protected] --ruby-version --create创建没有任何内容的本地宝石集。现在你可以运行gem install railsrails new .创建的myapp轨道与它的你在文件夹中的专用宝石环境。

由于不错的额外RVM将每次CD自动MYAPP目录时交换到正确的宝石。

至于据我所知这两种方法的工作,但有没有任何已知的问题,为什么你不会使用上述方法之一?

回答

1

如果你是像我这样的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标识;从而切换到您为项目设置的正确的宝石。

这会让你的项目使用rbenv同时仍然使用RVM快乐:)

把所有这些因素加以考虑让我们这些,现在你应该不在乎枯萎的人使用bundle exec或不兼容的开发!

1

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