关于 运行 guard init 时不使用捆绑器的警告

Warning regarding not using bundler when running guard init

在我的 Rails 应用程序中,当 运行 guard init rspec:

时收到此警告
Warning: you have a Gemfile, but you're not using bundler or
RUBYGEMS_GEMDEPS
14:54:15 - INFO - Writing new Guardfile to
/home/ubuntu/railsprojects/sillyfish/Guardfile 14:54:16 - INFO - rspec
guard added to Guardfile, feel free to edit it

我不明白为什么会显示它。可以忽略此警告吗?

这是我的 Gemfile:

source 'https://rubygems.org'

gem 'rails', '4.2.4'
gem 'pg'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc

group :development, :test do
  gem 'rspec-rails', '3.3.3'
  gem 'guard-rspec', require: false
  gem 'spring-commands-rspec'
  gem 'byebug'
end

group :development do
  gem 'web-console', '~> 2.0'
  gem 'spring'
end

group :test do
  gem 'capybara', '2.5.0'
end

#custom gems
gem 'puma'
gem 'bootstrap-sass', '~> 3.3.5'
gem 'devise', '~> 3.5.2'

如果你运行guard init rspec,它将使用全局安装的guard-rails。要 运行 通过 Gemfile 安装的那个,请使用 bundle exec guard init rspec。这也是the documentation.

中推荐的

来自自述文件:

It's important that you always run Guard through Bundler to avoid errors.

因此,最好认真对待此警告,以避免后续出现问题。

更技术性的回答:

可以通过 3 种方式为您的 Ruby(或 Rails)项目选择宝石:

  1. 因为它们安装在您的系统上(通过查看 $GEM_HOME 等环境变量),例如guard init rspec 将在您的 $GEM_HOME 中查找 guardguard-rspec。通常 RubyGems 会使用您安装的最新安装版本(并不总是您想要的)。

  2. 如果您有 Bundler,bundle exec guard init rspec 将导致您的 gem 以您的 Gemfile.lock 中列出的版本加载。这也允许您直接从与应用程序捆绑在一起的其他文件夹(在您的 Gemfile 中使用 :path 选项的任何地方)加载宝石(例如 .bundle 目录),甚至从 [=46 下载和更新=](使用 :github:branch 等选项)。

  3. 如果您有最新版本的 RubyGems,它还可以从 Gemfile.lock 加载您的宝石。但前提是您正确设置了 $RUBYGEMS_GEMDEPS 环境。它的工作方式类似于 Bundler(它读取您的 Gemfile.lock),除了它不具备所有功能(例如从 GitHub 存储库加载 gems)。

一般来说,如果您的项目有Gemfile,最好使用Bundler,因为它可以确保所有gem 的所有版本都符合您的期望。