summaryrefslogtreecommitdiff
path: root/v1.5/gemfile.html
blob: 4a37bcb62c11239e25535c74d87a0786535eba67 (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
<!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. Generate a Gemfile with the default rubygems.org source by running <code>bundle init</code>. If you can, use <code>https</code> so your connection to the rubygems.org server will be verified with SSL.
              </div>
              <pre class="highlight ruby"><span class="n">source</span> <span class="s1">'https://rubygems.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="s1">'nokogiri'</span>&#x000A;<span class="n">gem</span> <span class="s1">'rails'</span><span class="p">,</span> <span class="s1">'3.0.0.beta3'</span>&#x000A;<span class="n">gem</span> <span class="s1">'rack'</span><span class="p">,</span>  <span class="s1">'&gt;=1.0'</span>&#x000A;<span class="n">gem</span> <span class="s1">'thin'</span><span class="p">,</span>  <span class="s1">'~&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.
              </div>
              <pre class="highlight ruby"><span class="n">gem</span> <span class="s1">'rspec'</span><span class="p">,</span> <span class="ss">:require</span> <span class="o">=&gt;</span> <span class="s1">'spec'</span>&#x000A;<span class="n">gem</span> <span class="s1">'sqlite3'</span></pre>
              <div class='description'>
                Specify <code>:require => false</code> to prevent bundler from requiring the gem, but still install it and maintain dependencies.
              </div>
              <pre class="highlight ruby"><span class="n">gem</span> <span class="s1">'rspec'</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="s1">'sqlite3'</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.5/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="s1">'nokogiri'</span><span class="p">,</span> <span class="ss">:git</span> <span class="o">=&gt;</span> <span class="s1">'https://github.com/tenderlove/nokogiri.git'</span><span class="p">,</span> <span class="ss">:branch</span> <span class="o">=&gt;</span> <span class="s1">'1.4'</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.5/git.html">Learn more: Git</a>
            </div>
            <div class='bullet'>
              <div class='description'>
                If you would like to use a unpacked gem directly from the filesystem, simply set the <code>:path</code> option to the path containing the the gem's files.
              </div>
              <pre class="highlight ruby"><span class="n">gem</span> <span class="s1">'extracted_library'</span><span class="p">,</span> <span class="ss">:path</span> <span class="o">=&gt;</span> <span class="s1">'./vendor/extracted_library'</span>&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                Dependencies can be placed into groups. Groups can be ignored at install-time (using <code>--without</code>) or required all at once (using <code>Bundler.require</code>).
              </div>
              <pre class="highlight ruby"><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;<span class="n">gem</span> <span class="s1">'debugger'</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="s1">'rspec'</span>&#x000A;<span class="k">end</span></pre>
              <a href="/v1.5/groups.html">Learn more: Groups</a>
            </div>
            <div class='bullet'>
              <div class='description'>
                You can specify the required version of Ruby in the <code>Gemfile</code> with <code>ruby</code>. If the <code>Gemfile</code> is loaded on a different Ruby version, Bundler will raise an exception with an explanation.
              </div>
              <pre class="highlight ruby"><span class="n">ruby</span> <span class="s1">'1.9.3'</span>&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                What this means is that this app has a dependency to a Ruby VM that is ABI compatible with 1.9.3. If the version check does not match, Bundler will raise an exception. This will ensure the running code matches. You can be more specific with the <code>:engine</code> and <code>:engine_version</code> options.
              </div>
              <pre class="highlight ruby"><span class="n">ruby</span> <span class="s1">'1.9.3'</span><span class="p">,</span> <span class="ss">:engine</span> <span class="o">=&gt;</span> <span class="s1">'jruby'</span><span class="p">,</span> <span class="ss">:engine_version</span> <span class="o">=&gt;</span> <span class="s1">'1.6.7'</span></pre>
              <a href="/v1.5/gemfile_ruby.html">Learn More: Ruby Directive</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 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 class="current" 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>