summaryrefslogtreecommitdiff
path: root/v0.9/rails23.html
blob: 06195c8e61e99d48a4217801f1f3e82d3f63a87f (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
<!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'>
    <link href='/images/favicon.png' rel='shortcut icon' type='image/png'>
    <link href="/stylesheets/application.css" media="screen" rel="stylesheet" type="text/css" />
    <link href="/stylesheets/sunburst.css" media="screen" rel="stylesheet" type="text/css" />
  </head>
  <body>
    <div id='body'>
      <div id='contents'>
        <div id='header'>
                    <a href="/"><img width="725" alt="The best way to manage your application's dependencies" src="/images/gembundler.png" />
          </a>

        </div>
        <div id='intro'>
  Rails 2.3 comes with its own gem handling. We're going to override that and replace it with support for Bundler.
</div>
<h2>Using Bundler with Rails 2.3</h2>
<div class='contents'>
  <div class='bullet'>
    <div class='description'>
      If you don't have a Rails 2.3 app yet, generate one
    </div>
    <pre class='sunburst'>$ rails myapp&#x000A;$ cd myapp&#x000A;</pre>
  </div>
  <div class='bullet'>
    <div class='description'>
      Insert the following code in config/boot.rb, right above the line `Rails.boot!`
    </div>
    <pre class="sunburst"><span class="Keyword">class</span> <span class="JEntityNameType">Rails::Boot</span>&#x000A;  <span class="Keyword">def</span> <span class="Entity">run</span>&#x000A;    load_initializer&#x000A;&#x000A;    <span class="Support">Rails</span>::<span class="Entity">Initializer</span>.<span class="Entity">class_eval</span> <span class="Keyword">do</span>&#x000A;      <span class="Keyword">def</span> <span class="Entity">load_gems</span>&#x000A;        <span class="Variable"><span class="Variable">@</span>bundler_loaded</span> <span class="Keyword">||=</span> <span class="Support">Bundler</span>.<span class="Entity">require</span> <span class="Constant"><span class="Constant">:</span>default</span>, <span class="Support">Rails</span>.<span class="Entity">env</span>&#x000A;      <span class="Keyword">end</span>&#x000A;    <span class="Keyword">end</span>&#x000A;&#x000A;    <span class="Support">Rails</span>::<span class="Entity">Initializer</span>.<span class="Entity">run</span>(<span class="Constant"><span class="Constant">:</span>set_load_path</span>)&#x000A;  <span class="Keyword">end</span>&#x000A;<span class="Keyword">end</span>&#x000A;</pre>
  </div>
  <div class='bullet'>
    <div class='description'>
      Create a new file <code>config/preinitializer.rb</code> and insert the following
    </div>
    <pre class="sunburst"><span class="Keyword">begin</span>&#x000A;  <span class="Keyword">require</span> <span class="String"><span class="String">'</span>rubygems<span class="String">'</span></span>&#x000A;  <span class="Keyword">require</span> <span class="String"><span class="String">'</span>bundler<span class="String">'</span></span>&#x000A;<span class="Keyword">rescue</span> <span class="Variable">LoadError</span>&#x000A;  <span class="Keyword">raise</span> <span class="String"><span class="String">&quot;</span>Could not load the bundler gem. Install it with `gem install bundler`.<span class="String">&quot;</span></span>&#x000A;<span class="Keyword">end</span>&#x000A;&#x000A;<span class="Keyword">if</span> <span class="Support">Gem</span>::<span class="Entity">Version</span>.<span class="Entity">new</span>(<span class="Support">Bundler</span>::<span class="Entity">VERSION</span>) <span class="Keyword">&lt;=</span> <span class="Support">Gem</span>::<span class="Entity">Version</span>.<span class="Entity">new</span>(<span class="String"><span class="String">&quot;</span>0.9.24<span class="String">&quot;</span></span>)&#x000A;  <span class="Keyword">raise</span> <span class="Variable">RuntimeError</span>, <span class="String"><span class="String">&quot;</span>Your bundler version is too old.<span class="String">&quot;</span></span> <span class="Keyword">+</span>&#x000A;   <span class="String"><span class="String">&quot;</span>Run `gem install bundler` to upgrade.<span class="String">&quot;</span></span>&#x000A;<span class="Keyword">end</span>&#x000A;&#x000A;<span class="Keyword">begin</span>&#x000A;<span class="Comment">  <span class="Comment">#</span> Set up load paths for all bundled gems</span>&#x000A;  <span class="Variable">ENV</span>[<span class="String"><span class="String">&quot;</span>BUNDLE_GEMFILE<span class="String">&quot;</span></span>] <span class="Keyword">=</span> <span class="Support">File</span>.<span class="Entity">expand_path</span>(<span class="String"><span class="String">&quot;</span>../../Gemfile<span class="String">&quot;</span></span>, <span class="Variable">__FILE__</span>)&#x000A;  <span class="Support">Bundler</span>.<span class="Entity">setup</span>&#x000A;<span class="Keyword">rescue</span> <span class="Support">Bundler</span>::<span class="Entity">GemNotFound</span>&#x000A;  <span class="Keyword">raise</span> <span class="Variable">RuntimeError</span>, <span class="String"><span class="String">&quot;</span>Bundler couldn't find some gems.<span class="String">&quot;</span></span> <span class="Keyword">+</span>&#x000A;    <span class="String"><span class="String">&quot;</span>Did you run `bundle install`?<span class="String">&quot;</span></span>&#x000A;<span class="Keyword">end</span>&#x000A;</pre>
  </div>
  <div class='bullet'>
    <div class='description'>
      Get all config.gem declarations from your application, and place them into the Gemfile. If you have declarations in development.rb, for instance, place them in a named group. Make sure to include Rails itself and at least one source
    </div>
    <pre class="sunburst">source <span class="Constant"><span class="Constant">:</span>gemcutter</span>&#x000A;gem <span class="String"><span class="String">'</span>rails<span class="String">'</span></span>, <span class="String"><span class="String">'</span>~&gt; 2.3.5<span class="String">'</span></span>&#x000A;gem <span class="String"><span class="String">'</span>sqlite3-ruby<span class="String">'</span></span>, <span class="Constant"><span class="Constant">:</span>require</span> =&gt; <span class="String"><span class="String">'</span>sqlite3<span class="String">'</span></span>&#x000A;&#x000A;<span class="Comment"><span class="Comment">#</span> bundler requires these gems in all environments</span>&#x000A;<span class="Comment"><span class="Comment">#</span> gem 'nokogiri', '1.4.2'</span>&#x000A;<span class="Comment"><span class="Comment">#</span> gem 'geokit'</span>&#x000A;&#x000A;group <span class="Constant"><span class="Constant">:</span>development</span> <span class="Keyword">do</span>&#x000A;<span class="Comment">  <span class="Comment">#</span> bundler requires these gems in development</span>&#x000A;<span class="Comment">  <span class="Comment">#</span> gem 'rails-footnotes'</span>&#x000A;<span class="Keyword">end</span>&#x000A;&#x000A;group <span class="Constant"><span class="Constant">:</span>test</span> <span class="Keyword">do</span>&#x000A;<span class="Comment">  <span class="Comment">#</span> bundler requires these gems while running tests</span>&#x000A;<span class="Comment">  <span class="Comment">#</span> gem 'rspec'</span>&#x000A;<span class="Comment">  <span class="Comment">#</span> gem 'faker'</span>&#x000A;<span class="Keyword">end</span>&#x000A;</pre>
    <a href="/v0.9/groups.html">Learn More: Groups</a>
  </div>
  <div class='bullet'>
    <div class='description'>
      Once you have everything set up, you can use script/console, script/server, and other Rake tasks as usual. From this point on, you can follow the instructions in the Rails 3 guide
    </div>
    <pre class='sunburst'>$ rake db:migrate</pre>
    <a href="/v0.9/rails3.html#shared_with_23">Learn More: Rails 3</a>
  </div>
  <div class='bullet'>
    <div class='description'>
      Don't forget that non-Rails commands must be executed with bundle exec
    </div>
    <pre class='sunburst'>$ bundle exec cucumber</pre>
  </div>
</div>
      </div>
    </div>
    <div id='footer'>
      <img src="/images/emocow.png" />
      <img src="/images/panda.jpg" />
      <div class='spacer'></div>
      <div id='navigation'>
        <p>
          <b><a href="/v0.9/commands.html">commands</a></b>
          <a href="/v0.9/bundle_install.html">install</a>
          /
          <a href="/v0.9/bundle_update.html">update</a>
          /
          <a href="/v0.9/bundle_exec.html">exec</a>
          /
          <a href="/v0.9/bundle_config.html">config</a>
          /
          <a href="/v0.9/bundle_lock.html">lock</a>
          /
          <a href="/v0.9/bundle_package.html">package</a>
        </p>
        <p>
          <b>usage</b>
          <a href="/v0.9/gemfile.html">gemfile</a>
          /
          <a href="/v0.9/git.html">git</a>
          /
          <a href="/v0.9/groups.html">groups</a>
          /
          <a href="/v0.9/bundler_setup.html">setup</a>
          /
          <a href="/v0.9/deploying.html">deploying</a>
        </p>
        <p>
          <b>frameworks</b>
          <a href="/v0.9/bundler_setup.html">ruby</a>
          /
          <a href="/v0.9/rubygems.html">rubygems</a>
          /
          <a href="/v0.9/rubymotion.html">rubymotion</a>
          /
          <a href="/v0.9/sinatra.html">sinatra</a>
          /
          <a href="/v0.9/rails3.html">rails 3</a>
        </p>
      </div>
      <div class='spacer'></div>
      <img src="/images/bundler-small.png" />
    </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>
    <a href='http://github.com/carlhuda/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 class="current" 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</a>
    </div>
    <script>
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-557621-9']);
      _gaq.push(['_trackPageview']);
      (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    </script>
  </body>
</html>