summaryrefslogtreecommitdiff
path: root/v1.6/groups.html
blob: 80de687c0603c7bad5f71c456e0f9b802247b8d7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
<!DOCTYPE html>
<html>
  <head>
    <title>Bundler: The best way to manage a Ruby application's gems</title>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type'>
    <meta content='276VSYOko8B8vIu1i8i5qbj7_ql5PXo0dU69XQy-SL' name='globalsign-domain-verification'>
    <link href='/images/favicon.png' rel='shortcut icon' type='image/png'>
    <link href="/stylesheets/application.css" media="screen" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <div id='body'>
      <div id='header'>
        <a class="image" href="/"><img width="725" alt="The best way to manage your application's dependencies" src="/images/gembundler.png" /></a>
      </div>
      <div id='container'>
        <div id='contents'>
          <h2>Using Groups</h2>
          <div class='contents'>
            <div class='bullet'>
              <div class='description'>
                Grouping your dependencies allows you
                to perform operations on the entire
                group.
              </div>
              <pre class="highlight ruby"><span class="c1"># These gems are in the :default group</span>&#x000A;<span class="n">gem</span> <span class="s1">'nokogiri'</span>&#x000A;<span class="n">gem</span> <span class="s1">'sinatra'</span>&#x000A;&#x000A;<span class="n">gem</span> <span class="s1">'wirble'</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=&gt;</span> <span class="ss">:development</span>&#x000A;&#x000A;<span class="n">group</span> <span class="ss">:test</span> <span class="k">do</span>&#x000A;  <span class="n">gem</span> <span class="s1">'faker'</span>&#x000A;  <span class="n">gem</span> <span class="s1">'rspec'</span>&#x000A;<span class="k">end</span>&#x000A;&#x000A;<span class="n">group</span> <span class="ss">:test</span><span class="p">,</span> <span class="ss">:development</span> <span class="k">do</span>&#x000A;  <span class="n">gem</span> <span class="s1">'capybara'</span>&#x000A;  <span class="n">gem</span> <span class="s1">'rspec-rails'</span>&#x000A;<span class="k">end</span>&#x000A;&#x000A;<span class="n">gem</span> <span class="s1">'cucumber'</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=&gt;</span> <span class="o">[</span><span class="ss">:cucumber</span><span class="p">,</span> <span class="ss">:test</span><span class="o">]</span>&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                Install all gems, except those in the
                listed groups. Gems in at least one
                non-excluded group will still be installed.
              </div>
              <pre class="highlight plaintext">$ bundle install --without test development&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                Require the gems in particular groups,
                noting that gems outside of a named group
                are in the :default group
              </div>
              <pre class="highlight ruby"><span class="no">Bundler</span><span class="p">.</span><span class="nf">require</span><span class="p">(</span><span class="ss">:default</span><span class="p">,</span> <span class="ss">:development</span><span class="p">)</span>&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                Require the default gems, plus the gems
                in a group named the same as the current
                Rails environment
              </div>
              <pre class="highlight ruby"><span class="no">Bundler</span><span class="p">.</span><span class="nf">require</span><span class="p">(</span><span class="ss">:default</span><span class="p">,</span> <span class="no">Rails</span><span class="p">.</span><span class="nf">env</span><span class="p">)</span>&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                Restrict the groups of gems that you
                want to add to the load path. Only gems
                in these groups will be require'able
              </div>
              <pre class="highlight ruby"><span class="nb">require</span> <span class="s1">'rubygems'</span>&#x000A;<span class="nb">require</span> <span class="s1">'bundler'</span>&#x000A;<span class="no">Bundler</span><span class="p">.</span><span class="nf">setup</span><span class="p">(</span><span class="ss">:default</span><span class="p">,</span> <span class="ss">:ci</span><span class="p">)</span>&#x000A;<span class="nb">require</span> <span class="s1">'nokogiri'</span></pre>
              <a href="/v1.6/bundler_setup.html">Learn More: Bundler.setup</a>
            </div>
            <h2 id='grouping-your-dependencies'>
              Grouping Your Dependencies
            </h2>
            <div class='bullet'>
              <div class='description'>
                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
                using <code>mysql2</code> or <code>pg</code>. 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:
              </div>
              <pre class="highlight ruby"><span class="n">source</span> <span class="s1">'http://rubygems.org'</span>&#x000A;&#x000A;<span class="n">gem</span> <span class="s1">'rails'</span><span class="p">,</span> <span class="s1">'3.2.2'</span>&#x000A;<span class="n">gem</span> <span class="s1">'rack-cache'</span><span class="p">,</span> <span class="ss">:require</span> <span class="o">=&gt;</span> <span class="s1">'rack/cache'</span>&#x000A;<span class="n">gem</span> <span class="s1">'nokogiri'</span><span class="p">,</span> <span class="s1">'~&gt; 1.4.2'</span>&#x000A;&#x000A;<span class="n">group</span> <span class="ss">:development</span> <span class="k">do</span>&#x000A;  <span class="n">gem</span> <span class="s1">'sqlite3'</span>&#x000A;<span class="k">end</span>&#x000A;&#x000A;<span class="n">group</span> <span class="ss">:production</span> <span class="k">do</span>&#x000A;  <span class="n">gem</span> <span class="s1">'pg'</span>&#x000A;<span class="k">end</span>&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                Now, in development, you can instruct bundler to skip the <code>production</code> group:
              </div>
              <pre class="highlight plaintext">$ bundle install --without production&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                Bundler will remember that you installed the gems using <code>--without
                production</code>. For curious readers, bundler stores the flag in
                <code>APP_ROOT/.bundle/config</code>. You can see all of the settings that bundler saved
                there by running <code>bundle config</code>, which will also print out global settings
                (stored in <code>~/.bundle/config</code>), and settings set via environment variables.
                For more information on configuring bundler, please see:
                <a href="/v1.6/bundle_config.html">bundle config</a>
              </div>
            </div>
            <div class='bullet'>
              <p class='description'>
                If you run <code>bundle install</code> later, without any flags, bundler will remember
                that you last called <code>bundle install --without production</code>, and use that flag
                again. When you <code>require 'bundler/setup'</code>, bundler will ignore gems in these
                groups.
              </p>
              <p class='description'>
                You can also specify which groups to automatically require through the parameters to
                <code>Bundler.require</code>. The <code>:default</code> group includes all gems not
                listed under any group. If you call <code>Bundler.require(:default, :development)</code>,
                bundler will <code>require</code> all the gems in the <code>:default</code> group, as
                well as the gems in the <code>:development</code> group.
              </p>
              <p class='description'>
                By default, a Rails generated app calls <code>Bundler.require(:default,
                Rails.env)</code> in your <code>application.rb</code>, which links the groups in your
                <code>Gemfile</code> to the Rails environment. If you use other groups (not linked to a
                Rails environment), you can add them to the call to <code>Bundler.require</code>, if you
                want them to be automatically required.
              </p>
              <p class='description'>
                Remember that you can always leave groups of gems out of <code>Bundler.require</code>,
                and then require them manually using Ruby's <code>require</code> 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.
              </p>
            </div>
          </div>
        </div>
        <div id='sidebar'>
          <h2>Would you like to</h2>
          <ul>
            <li><a href="/#getting-started">Get started</a></li>
            <li><a href="/issues.html">Report a bug</a></li>
            <li><a href="/v1.6/whats_new.html">See what's new</a></li>
            <li><a href="/v1.6/man/bundle.1.html">Read documentation</a></li>
            <li><a href="/#get-involved">Discuss and Contribute</a></li>
            <li><a href="/v1.6/faq.html">View FAQs</a></li>
          </ul>
          <div class='shirts'>
            <div class='content'>
              <p>
                Bundler is developed entirely by a team of volunteers.
                <a href="http://www.gittip.com/bundler">Support their work</a>
                and help make Bundler better for everyone.
              </p>
              <p>
                <script data-gittip-username='bundler' src='//gttp.co/v1.js'></script>
                <br>
                <br>
              </p>
            </div>
          </div>
          <h2>Bundler Commands</h2>
          <ul>
            <li><a href="/v1.6/bundle_install.html">bundle install</a></li>
            <li><a href="/v1.6/bundle_update.html">bundle update</a></li>
            <div class='buttons'>
              <a href="/v1.6/commands.html">View all commands</a>
            </div>
          </ul>
          <h2>Help With</h2>
          <ul>
            <li><a href="/v1.6/gemfile.html">Gemfiles</a></li>
            <li><a href="/v1.6/groups.html">Groups</a></li>
            <li><a href="/v1.6/git.html">Gems from git</a></li>
            <li><a href="/v1.6/bundler_setup.html">Bundler.setup</a></li>
            <li><a href="/v1.6/deploying.html">Deploying</a></li>
            <li><a href="/v1.6/bundler_sharing.html">Sharing</a></li>
            <li><a href="/v1.6/updating_gems.html">Updating Gems</a></li>
            <li><a href="/compatibility.html">Compatible versions</a></li>
          </ul>
          <h2>Use Bundler with</h2>
          <ul>
            <li><a href="/v1.6/rails3.html">Rails 3</a></li>
            <li><a href="/v1.6/rails23.html">Rails 2.3</a></li>
            <li><a href="/v1.6/sinatra.html">Sinatra</a></li>
            <li><a href="/v1.6/rubygems.html">Rubygems</a></li>
            <li><a href="/v1.6/rubymotion.html">RubyMotion</a></li>
          </ul>
          <div class='shirts'>
            <div class='content'>
                            <a class="image" onclick="ga('send', 'devswag');" href="http://www.devswag.com/collections/bundler"><img src="/images/bundler-shirt.png" />
              </a>

              <p>
                <a onclick="ga('send', 'devswag');" href="http://www.devswag.com/collections/bundler">Buy Bundler Shirts & Stickers!</a>
              </p>
            </div>
          </div>
        </div>
      </div>
    </div>
    <div id='footer'>
      <img src="/images/emocow.png" />
      <img src="/images/panda.jpg" />
      <div class='spacer'></div>
      <div id='credits'>
        <p>
          Many thanks to Bundler's <a href="/contributors.html">contributors</a>
          and <a href="/sponsors.html">sponsors</a>
        </p>
      </div>
      <div class='spacer'></div>
      <img src="/images/bundler-small.png" />
    </div>
    <a href='http://github.com/bundler/bundler/' id='github'>
      <img alt='Fork me on GitHub' src='http://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png'>
    </a>
    <div id='prod-versions'>
      Docs:
      <a href="/v0.9/">v0.9</a>
      <a href="/v1.0/">v1.0</a>
      <a href="/v1.1/">v1.1</a>
      <a href="/v1.2/">v1.2</a>
      <a href="/v1.3/">v1.3</a>
      <a href="/v1.5/index.html">v1.5</a>
      <a class="current" href="/">v1.6</a>
    </div>
    <script>
      (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
      (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
      m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
      })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
      ga('create', 'UA-39559982-1', 'bundler.io');
      ga('send', 'pageview');
    </script>
  </body>
</html>