summaryrefslogtreecommitdiff
path: root/v1.0/gemfile.html
blob: bb6ba8cd7f24d4016da96693ac45f5d3bfbca4e1 (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
<!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>In Depth</h2>
          <div class='contents'>
            <div class='bullet'>
              <div class='description'>
                Read the manual for an in-depth discussion of all of the options available in the
                <code>Gemfile</code> and how to use them.
              </div>
              <a href="./man/gemfile.5.html">Gemfile manual</a>
            </div>
          </div>
          <h2>Gemfiles</h2>
          <div class='contents'>
            <div class='bullet'>
              <div class='description'>
                Gemfiles require at least one gem source, in the form of the URL for a Rubygems server.
                There are shortcuts for the default gem server, so all of these sources are the same.
              </div>
              <pre class="highlight ruby"><span class="n">source</span> <span class="ss">:rubygems</span>&#x000A;<span class="n">source</span> <span class="s2">"http://rubygems.org"</span>&#x000A;<span class="n">source</span> <span class="ss">:rubyforge</span>&#x000A;<span class="n">source</span> <span class="s2">"http://gems.rubyforge.org"</span>&#x000A;<span class="n">source</span> <span class="ss">:gemcutter</span>&#x000A;<span class="n">source</span> <span class="s2">"http://gemcutter.org"</span>&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                Declare the gems that you need, including version numbers. Specify versions using the same
                syntax that Rubygems supports for dependencies.
              </div>
              <pre class="highlight ruby"><span class="n">gem</span> <span class="s2">"nokogiri"</span>&#x000A;<span class="n">gem</span> <span class="s2">"rails"</span><span class="p">,</span> <span class="s2">"3.0.0.beta3"</span>&#x000A;<span class="n">gem</span> <span class="s2">"rack"</span><span class="p">,</span>  <span class="s2">"&gt;=1.0"</span>&#x000A;<span class="n">gem</span> <span class="s2">"thin"</span><span class="p">,</span>  <span class="s2">"~&gt;1.1"</span></pre>
              <div class='notes'>
                Most of the version specifiers, like <code>>= 1.0</code>, are self-explanatory.
                The specifier <code>~></code> has a special meaning, best shown by example.
                <code>~> 2.0.3</code> is identical to <code>>= 2.0.3</code> and <code>< 2.1</code>.
                <code>~> 2.1</code> is identical to <code>>= 2.1</code> and <code>< 3.0</code>.
                <code>~> 2.2.beta</code> will match prerelease versions like <code>2.2.beta.12</code>.
              </div>
              <a href="http://guides.rubygems.org/patterns/#pessimistic_version_constraint">Rubygems version specifiers</a>
            </div>
            <div class='bullet'>
              <div class='description'>
                If a gem's main file is different than the gem name, specify how to require it.
                Or use <code>false</code> to prevent bundler to require it (but it will still
                install it and maintain dependencies). And for gems with several files to require,
                it's also possible to give an array to <code>:require</code>.
              </div>
              <pre class="highlight ruby"><span class="n">gem</span> <span class="s2">"rspec"</span><span class="p">,</span> <span class="ss">:require</span> <span class="o">=&gt;</span> <span class="s2">"spec"</span>&#x000A;<span class="n">gem</span> <span class="s2">"sqlite3"</span>&#x000A;<span class="n">gem</span> <span class="s2">"gem-release"</span><span class="p">,</span> <span class="ss">:require</span> <span class="o">=&gt;</span> <span class="kp">false</span>&#x000A;<span class="n">gem</span> <span class="s2">"redis"</span><span class="p">,</span> <span class="ss">:require</span> <span class="o">=&gt;</span> <span class="o">[</span><span class="s2">"redis/connection/hiredis"</span><span class="p">,</span> <span class="s2">"redis"</span><span class="o">]</span></pre>
              <div class='notes'>
                In order to require gems in your <code>Gemfile</code>, you will need to call
                <code>Bundler.require</code> in your application.
              </div>
              <a href="/v1.0/groups.html">Learn More: Bundler.require</a>
            </div>
            <div class='bullet'>
              <div class='description'>
                Git repositories are also valid gem sources, as long as the repo contains one or
                more valid gems. Specify what to check out with <code>:tag</code>,
                <code>:branch</code>, or <code>:ref</code>. The default is the <code>master</code> branch.
              </div>
              <pre class="highlight ruby"><span class="n">gem</span> <span class="s2">"nokogiri"</span><span class="p">,</span> <span class="ss">:git</span> <span class="o">=&gt;</span> <span class="s2">"https://github.com/tenderlove/nokogiri.git"</span><span class="p">,</span> <span class="ss">:branch</span> <span class="o">=&gt;</span> <span class="s2">"1.4"</span>&#x000A;&#x000A;<span class="n">git</span> <span class="s2">"https://github.com/wycats/thor.git"</span><span class="p">,</span> <span class="ss">:tag</span> <span class="o">=&gt;</span> <span class="s2">"v0.13.4"</span>&#x000A;<span class="n">gem</span> <span class="s2">"thor"</span></pre>
              <div class='notes'>
                If the git repository does not contain a <code>.gemspec</code> file, bundler
                will create a simple one, without any dependencies, executables or C extensions.
                This may work for simple gems, but not work for others. If there is no .gemspec,
                you probably shouldn't use the gem from git.
              </div>
              <a href="/v1.0/git.html">Learn more: Git</a>
            </div>
            <div class='bullet'>
              <div class='description'>
                If you are actively developing a gem, perhaps checked out from Github, you can use the gem
                directly from its directory on your filesystem.
              </div>
              <pre class="highlight ruby"><span class="n">gem</span> <span class="s2">"nokogiri"</span><span class="p">,</span> <span class="ss">:path</span> <span class="o">=&gt;</span> <span class="s2">"~/sw/gems/nokogiri"</span>&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                Dependencies can be placed into groups, to be ignored at install-time or required all at once.
              </div>
              <pre class="highlight ruby"><span class="n">gem</span> <span class="s2">"wirble"</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=&gt;</span> <span class="ss">:development</span>&#x000A;<span class="n">gem</span> <span class="s2">"ruby-debug"</span><span class="p">,</span> <span class="ss">:group</span> <span class="o">=&gt;</span> <span class="o">[</span><span class="ss">:development</span><span class="p">,</span> <span class="ss">:test</span><span class="o">]</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="s2">"rspec"</span>&#x000A;<span class="k">end</span></pre>
              <a href="/v1.0/groups.html">Learn more: Groups</a>
            </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 class="current" 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 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>