summaryrefslogtreecommitdiff
path: root/v1.3/deploying.html
diff options
context:
space:
mode:
Diffstat (limited to 'v1.3/deploying.html')
-rw-r--r--v1.3/deploying.html212
1 files changed, 0 insertions, 212 deletions
diff --git a/v1.3/deploying.html b/v1.3/deploying.html
deleted file mode 100644
index 1d1dccff03..0000000000
--- a/v1.3/deploying.html
+++ /dev/null
@@ -1,212 +0,0 @@
-<!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.3/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="s1">'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="s1">'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>
- <h2 id='deploying-your-application'>
- Deploying Your Application
- </h2>
- <p>
- When you run <code>bundle install</code>, bundler will (by default), install your gems
- to your system repository of gems. This means that they will show up in <code>gem
- list</code>. Additionally, if you are developing a number of applications, you will not
- need to download and install gems in common for each application. This is nice for
- development, but somewhat problematic for deployment.
- </p>
- <p>
- In a deployment scenario, the Unix user you deploy with may not have access to install
- gems to a system location. Even if the user does (or you use <code>sudo</code>), the
- user that boots the application may not have access to them. For instance, Passenger
- runs its Ruby subprocesses with the user <code>nobody</code>, a somewhat restricted
- user. The tradeoffs in a deployment environment lean more heavily in favor of isolation
- (even at the cost of a somewhat slower deploy-time <code>bundle install</code> when some
- third-party dependencies have changed).
- </p>
- <p>
- As a result, bundler comes with a <code>--deployment</code> flag that encapsulates the
- best practices for using bundler in a deployment environment. These practices are based
- on significant feedback we have received during the development of bundler, as well as a
- number of bug reports that mostly reflected a misunderstanding of how to best configure
- bundler for deployment. The <code>--deployment</code> flags adds the following defaults:
- </p>
- <ul>
- <li>
- Instead of installing gems to the system location, bundler will install gems to
- <code>vendor/bundle</code> inside your application. Bundler will transparently remember
- this location when you invoke it inside your application (with
- <code>Bundler.setup</code> and <code>Bundler.require</code>).
- </li>
- <li>
- Bundler will not use gems already installed to your system, even if they exist.
- </li>
- <li>
- If you have run <code>bundle pack</code>, checked in the <code>vendor/cache</code>
- directory, and do not have any git gems, Bundler will not contact the internet while
- installing your bundle.
- </li>
- <li>
- Bundler will require a <code>Gemfile.lock</code> snapshot, and fail if you did not
- provide one.
- </li>
- <li>
- Bundler will not transparently update your <code>Gemfile.lock</code> if it is out of
- date with your <code>Gemfile</code>
- </li>
- </ul>
- <p>
- If you use Capistrano, you should symlink <code>vendor/bundle</code> to
- <code>shared/vendor_bundle</code> so that bundler will share your installed gems between
- deployments (making things zippy if you didn't make any changes), but still give you the
- benefits of isolation from other applications.
- </p>
- <p>
- By defaulting the bundle directory to <code>vendor/bundle</code>, and installing your
- bundle as part of your deployment process, you can be sure that the same Unix user that
- checked out your application also installed the third-party code your application needs.
- This means that if Passenger (or Unicorn) can see your application, it can also see its
- dependencies.
- </p>
- <p>
- The <code>--deployment</code> flag requires an up-to-date <code>Gemfile.lock</code> to
- ensure that the testing you have done (in development and staging) actually reflects the
- code you put into production. You can run <code>bundle check</code> before deploying
- your application to make sure that your <code>Gemfile.lock</code> is up-to-date. Note
- that it will always be up-to-date if you have run <code>bundle install</code>,
- successfully booted your application (or run your tests) since the last time you changed
- your <code>Gemfile</code>.
- </p>
- </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 class="current" 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>