使用 RVM 本地 gemset 和使用 Bundle exec 之间有区别吗?
Is there a difference between using RVM local gemset and using Bundle exec?
ruby gem 集存在根本问题,其中像 rake xxxx 这样的命令可能会产生错误,因为命令可能使用 rake 的全球版本,而您的 gem 文件需要非常特定的版本。
我知道有两种方法可以缓解这种情况。
在 rake 和 rails 命令前使用 bundle exec
。例如 bundle exec rake db:migrate
在前面添加这个确保命令是相对于当前包执行的,这意味着当你 运行 bundle install
时创建的包。
使用 RVM。使用 RVM 创建本地 gem 集的方法鲜为人知。首先,您为新应用程序创建目录,在本例中为 mkdir myapp
、cd myapp
,然后是 运行 rvm use ruby-2.3.0@myapp --ruby-version --create
,用于创建本地 gem 集,其中没有任何内容。现在,您可以 运行 gem install rails
和 rails new .
在您所在的文件夹中创建 rails myapp 及其专用的 gem 环境。
每次您自动 cd 到 myapp 目录时,额外的 RVM 将交换到右侧 gemset。
据我所知,这两种方法都有效,但是否存在您不使用上述方法之一的已知问题?
不使用 (2) 的一个原因:如果其他人想要使用您的代码,他们将不得不自己复制所有代码,而不是仅仅记住键入 bundle exec
。他们可能以前从未见过 (2),所以这可能很重要。
如果您像我一样是 RVM 粉丝,我会为我开始的每个 rails 项目创建我自己的 gemset。这将使我更容易只使用 rake
和 rails
命令,而无需每次都指定 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
!
ruby gem 集存在根本问题,其中像 rake xxxx 这样的命令可能会产生错误,因为命令可能使用 rake 的全球版本,而您的 gem 文件需要非常特定的版本。
我知道有两种方法可以缓解这种情况。
在 rake 和 rails 命令前使用
bundle exec
。例如bundle exec rake db:migrate
在前面添加这个确保命令是相对于当前包执行的,这意味着当你 运行bundle install
时创建的包。使用 RVM。使用 RVM 创建本地 gem 集的方法鲜为人知。首先,您为新应用程序创建目录,在本例中为
mkdir myapp
、cd myapp
,然后是 运行rvm use ruby-2.3.0@myapp --ruby-version --create
,用于创建本地 gem 集,其中没有任何内容。现在,您可以 运行gem install rails
和rails new .
在您所在的文件夹中创建 rails myapp 及其专用的 gem 环境。
每次您自动 cd 到 myapp 目录时,额外的 RVM 将交换到右侧 gemset。
据我所知,这两种方法都有效,但是否存在您不使用上述方法之一的已知问题?
不使用 (2) 的一个原因:如果其他人想要使用您的代码,他们将不得不自己复制所有代码,而不是仅仅记住键入 bundle exec
。他们可能以前从未见过 (2),所以这可能很重要。
如果您像我一样是 RVM 粉丝,我会为我开始的每个 rails 项目创建我自己的 gemset。这将使我更容易只使用 rake
和 rails
命令,而无需每次都指定 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
!