summaryrefslogtreecommitdiff
path: root/v1.0/deploying.html
blob: 30b7eb767b96c3356c9cd63f26df04c2846d9c53 (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
<!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>Deploying bundled applications</h2>
          <div class='contents'>
            <div class='bullet'>
              <div class='description'>
                Before deploying an app that uses Bundler, Add your <code>Gemfile</code>
                and <code>Gemfile.lock</code> to source control, but ignore the
                <code>.bundle</code> folder, which is specific to each machine.
              </div>
              <pre class="highlight plaintext">$ echo ".bundle\n" &gt;&gt; .gitignore&#x000A;$ git add Gemfile Gemfile.lock .gitignore&#x000A;$ git commit -m "Add Bundler support"</pre>
              <div class='notes'>
                Once you have done that, there are two ways to deploy using Bundler:
                manually or automatically.
              </div>
            </div>
            <div class='bullet'>
              <div class='description'>
                <h3>Manual deployment</h3>
                In your deploy script, after updating to the latest
                code, install your bundle to the <code>vendor/bundle</code>
                directory, ensuring all your dependencies are met.
              </div>
              <pre class="highlight plaintext">$ bundle install --deployment</pre>
              <div class='notes'>
                <p>
                  Start your application servers as usual, and your
                  application will use your bundled environment
                  with the exact same gems you use in development.
                </p>
                <p>
                  If you have run <code>bundle package</code>, the cached
                  gems will be used automatically.
                </p>
                <a href="/v1.0/bundle_package.html">Learn More: Packing</a>
              </div>
            </div>
            <div class='bullet'>
              <h3>Automatic deployment with Capistrano</h3>
              <div class='description'>
                To pull in the Bundler Cap task, just add this to your
                <code>deploy.rb</code> file:
              </div>
              <pre class="highlight ruby"><span class="nb">require</span> <span class="s2">"bundler/capistrano"</span></pre>
              <div class='notes'>
                That's it! Running <code>cap deploy</code> will now automatically run
                <code>bundle install</code> on the remote server with deployment-friendly
                options. A list of options that can be changed is available in the help
                for the cap task. To see it, run <code>cap -e bundle:install</code>.
              </div>
            </div>
            <div class='bullet'>
              <div class='description'>
                <h3>Automatic deployment with Vlad</h3>
                There is a default Vlad task available. To make it available, add this line
                to the Vlad <code>deploy.rb</code>.
              </div>
              <pre class="highlight ruby"><span class="nb">require</span> <span class="s2">"bundler/vlad"</span></pre>
              <div class='notes'>
                Once you have done that, the <code>vlad:bundle:install</code> task will be
                available for use. Make sure it is run as part of your deploy. For example:
              </div>
              <pre class="highlight ruby"><span class="n">task</span> <span class="s2">"vlad:deploy"</span> <span class="o">=&gt;</span> <span class="sx">%w[&#x000A;  vlad:update vlad:bundle:install vlad:start_app vlad:cleanup&#x000A;]</span>&#x000A;</pre>
            </div>
            <div class='bullet'>
              <div class='description'>
                <h3>After deploying</h3>
                Make sure to use <code>bundle exec</code> to run any executables
                from gems in the bundle
              </div>
              <pre class="highlight plaintext">$ bundle exec rake db:setup</pre>
              <div class='notes'>
                Alternatively, you can use the <code>--binstubs</code> option on the
                install command to generate executable binaries that can be used instead of
                <code>bundle exec</code>.
              </div>
              <a href="./man/bundle-exec.1.html">Learn More: Executables</a>
            </div>
            <div class='bullet'>
              <div class='description'>
                <h3>Heroku</h3>
                When you deploy to Heroku, Bundler will be run automatically as long as a Gemfile is present. If you check in your Gemfile.lock, Heroku will run <code>`bundle install --deployment`</code>. If you want to exclude certain groups using the <code>--without</code> option, you need to use <code>`heroku config`</code>.
              </div>
              <pre class="highlight plaintext">$ heroku config:add BUNDLE_WITHOUT="test development" --app app_name</pre>
              <a href="http://docs.heroku.com/bundler">Heroku Bundler Documentation</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>