Ruby 使用RVM本地gemset和使用Bundle exec之间有区别吗?
RubyGem集存在一个根本问题,像rakexxxx这样的命令可能会产生错误,因为该命令可能使用全局版本的rake,而您的gemfile需要非常特定的版本 我知道两种缓解这种情况的方法Ruby 使用RVM本地gemset和使用Bundle exec之间有区别吗?,ruby,rvm,bundler,Ruby,Rvm,Bundler,RubyGem集存在一个根本问题,像rakexxxx这样的命令可能会产生错误,因为该命令可能使用全局版本的rake,而您的gemfile需要非常特定的版本 我知道两种缓解这种情况的方法 在rake和rails命令前面使用bundle exec。例如,bundle exec rake db:migrate在前面添加此命令可确保执行与当前bundle相关的命令,即在运行bundle install时创建的bundle 使用RVM。使用RVM创建本地gemset的方法不太为人所知。首先,在本例中,您为
bundle exec
。例如,bundle exec rake db:migrate
在前面添加此命令可确保执行与当前bundle相关的命令,即在运行bundle install
时创建的bundlemkdir myapp
,cd myapp
,然后运行rvm use ruby-2.3。0@myapp--ruby version--create
用于创建本地gem集,其中不包含任何内容。现在,您可以运行gem install rails
和rails new.
在您所在的文件夹中使用专用的gem环境创建rails myapp据我所知,这两种方法都有效,但您为什么不使用上述方法之一,是否存在任何已知问题?一个不使用的原因(2):如果其他人想使用您的代码,他们将不得不自己复制所有这些,而不仅仅是记住键入
bundle exec
。他们可能以前从未见过(2),所以这可能不是小事。如果你像我一样是RVM迷,我会为我开始的每个rails项目创建自己的gemset。这将使我更容易只使用rake
和rails
命令,而不必每次都指定bundle exec
在共享代码时请记住,有些开发人员可能正在使用rbenv,或者根本不使用ruby版本管理器。确保每个人都满意并使用相同版本的ruby的一种方法是在项目目录中提供两个附加文件(.ruby version
和.ruby gemset
),并在项目中跟踪它们
.ruby版本
文件将包含您正在使用的ruby版本,例如2.4.1
。请注意,这与RVM和rbenv都兼容,并将切换到正确的ruby版本
.ruby gemset
文件仅由RVM标识;因此,切换到为项目设置的正确gemset
这将使您的项目与使用rbenv的开发人员兼容,同时仍使我们这些使用RVM的人感到高兴:)
考虑到所有这些因素,现在您应该不太在意人们是否使用bundle exec