Grouping your dependencies allows you to perform operations on the entire group.
# 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]
Install all gems, except those in the listed groups. Gems in at least one non-excluded group will still be installed.
$ bundle install --without test development
Require the gems in particular groups, noting that gems outside of a named group are in the :default group
Require the default gems, plus the gems in a group named the same as the current Rails environment
Restrict the groups of gems that you want to add to the load path. Only gems in these groups will be require’able
require 'rubygems' require 'bundler' Bundler.setup(:default, :ci) require 'nokogiri'
Grouping Your Dependencies
You’ll sometimes have groups of gems that only make sense in particular environments.
For instance, you might develop your app (at an early stage) using SQLite, but deploy it
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
Now, in development, you can instruct bundler to skip the
$ bundle install --without production
Bundler will remember that you installed the gems using
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
~/.bundle/config), and settings set via environment variables.
For more information on configuring bundler, please see:
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
You can also specify which groups to automatically require through the parameters to
:default group includes all gems not
listed under any group. If you call
require all the gems in the
:default group, as
well as the gems in the
By default, a Rails generated app calls
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
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.