How to manage groups of gems
# These gems are in the :default group
gem 'nokogiri'
gem 'sinatra'
gem 'wirble', group: :development
group :test do
gem 'faker'
gem 'rspec'
end
group :test, :development do
gem 'capybara'
gem 'rspec-rails'
end
gem 'cucumber', group: [:cucumber, :test]
$ bundle install --without test development
Bundler.require(:default, :development)
Bundler.require(:default, Rails.env)
require 'rubygems'
require 'bundler'
Bundler.setup(:default, :ci)
require 'nokogiri'
Optional groups and --with
group :name, optional: true do, and then opt
into installing an optional group with bundle install --with name.
Grouping your dependencies
mysql2 or pg. In this example, you might not have MySQL
or Postgres installed on your development machine, and want bundler to skip it.
To do this, you can group your dependencies:
source 'https://rubygems.org'
gem 'rails', '3.2.2'
gem 'rack-cache', require: 'rack/cache'
gem 'nokogiri', '~> 1.4.2'
group :development do
gem 'sqlite3'
end
group :production do
gem 'pg'
end
production group:
$ bundle install --without production
--without
production. For curious readers, bundler stores the flag in
APP_ROOT/.bundle/config. You can see all of the settings that bundler saved
there by running bundle config, which will also print out global settings
(stored in ~/.bundle/config), and settings set via environment variables.
For more information on configuring bundler, please see:
bundle config
If you run bundle install later, without any flags, bundler will remember
that you last called bundle install --without production, and use that flag
again. When you require 'bundler/setup', bundler will ignore gems in these
groups.
You can also specify which groups to automatically require through the parameters to
Bundler.require. The :default group includes all gems not
listed under any group. If you call Bundler.require(:default, :development),
bundler will require all the gems in the :default group, as
well as the gems in the :development group.
By default, a Rails generated app calls Bundler.require(:default,
Rails.env) in your application.rb, which links the groups in your
Gemfile to the Rails environment. If you use other groups (not linked to a
Rails environment), you can add them to the call to Bundler.require, if you
want them to be automatically required.
Remember that you can always leave groups of gems out of Bundler.require,
and then require them manually using Ruby's require at the appropriate
place in your app. You might do this because requiring a certain gem takes some time,
and you don't need it every time you boot your application.