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

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的方法不太为人所知。首先,在本例中,您为

RubyGem集存在一个根本问题,像rakexxxx这样的命令可能会产生错误,因为该命令可能使用全局版本的rake,而您的gemfile需要非常特定的版本

我知道两种缓解这种情况的方法

  • 在rake和rails命令前面使用
    bundle exec
    。例如,
    bundle exec rake db:migrate
    在前面添加此命令可确保执行与当前bundle相关的命令,即在运行
    bundle install
    时创建的bundle

  • 使用RVM。使用RVM创建本地gemset的方法不太为人所知。首先,在本例中,您为新应用程序创建目录
    mkdir myapp
    cd myapp
    ,然后运行
    rvm use ruby-2.3。0@myapp--ruby version--create
    用于创建本地gem集,其中不包含任何内容。现在,您可以运行
    gem install rails
    rails new.
    在您所在的文件夹中使用专用的gem环境创建rails myapp

  • 每次您将cd自动转到myapp目录时,As nice extra RVM都会切换到右侧的gemset


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

    一个不使用的原因(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