1BUNDLE-INSTALL(1) BUNDLE-INSTALL(1)
2
3
4
6 bundle-install - Install the dependencies specified in your Gemfile
7
9 bundle install [--binstubs[=DIRECTORY]] [--clean] [--deployment]
10 [--force] [--frozen] [--full-index] [--gemfile=GEMFILE] [--jobs=NUMBER]
11 [--local] [--no-cache] [--no-prune] [--path PATH] [--quiet]
12 [--retry=NUMBER] [--shebang] [--standalone[=GROUP[ GROUP...]]] [--sys‐
13 tem] [--trust-policy=POLICY] [--with=GROUP[ GROUP...]] [--with‐
14 out=GROUP[ GROUP...]]
15
17 Install the gems specified in your Gemfile(5). If this is the first
18 time you run bundle install (and a Gemfile.lock does not exist),
19 Bundler will fetch all remote sources, resolve dependencies and install
20 all needed gems.
21
22 If a Gemfile.lock does exist, and you have not updated your Gemfile(5),
23 Bundler will fetch all remote sources, but use the dependencies speci‐
24 fied in the Gemfile.lock instead of resolving dependencies.
25
26 If a Gemfile.lock does exist, and you have updated your Gemfile(5),
27 Bundler will use the dependencies in the Gemfile.lock for all gems that
28 you did not update, but will re-resolve the dependencies of gems that
29 you did update. You can find more information about this update process
30 below under CONSERVATIVE UPDATING.
31
33 To apply any of --binstubs, --deployment, --path, or --without every
34 time bundle install is run, use bundle config (see bundle-config(1)).
35
36 --binstubs[=<directory>]
37 Creates a directory (defaults to ~/bin) and place any executa‐
38 bles from the gem there. These executables run in Bundler´s con‐
39 text. If used, you might add this directory to your environ‐
40 ment´s PATH variable. For instance, if the rails gem comes with
41 a rails executable, this flag will create a bin/rails executable
42 that ensures that all referred dependencies will be resolved
43 using the bundled gems.
44
45 --clean
46 On finishing the installation Bundler is going to remove any
47 gems not present in the current Gemfile(5). Don´t worry, gems
48 currently in use will not be removed.
49
50 --deployment
51 In deployment mode, Bundler will ´roll-out´ the bundle for pro‐
52 duction or CI use. Please check carefully if you want to have
53 this option enabled in your development environment.
54
55 --force
56 Force download every gem, even if the required versions are
57 already available locally.
58
59 --frozen
60 Do not allow the Gemfile.lock to be updated after this install.
61 Exits non-zero if there are going to be changes to the Gem‐
62 file.lock.
63
64 --full-index
65 Bundler will not call Rubygems´ API endpoint (default) but down‐
66 load and cache a (currently big) index file of all gems. Perfor‐
67 mance can be improved for large bundles that seldom change by
68 enabling this option.
69
70 --gemfile=<gemfile>
71 The location of the Gemfile(5) which Bundler should use. This
72 defaults to a Gemfile(5) in the current working directory. In
73 general, Bundler will assume that the location of the Gemfile(5)
74 is also the project´s root and will try to find Gemfile.lock and
75 vendor/cache relative to this location.
76
77 --jobs=[<number>], -j[<number>]
78 The maximum number of parallel download and install jobs. The
79 default is 1.
80
81 --local
82 Do not attempt to connect to rubygems.org. Instead, Bundler will
83 use the gems already present in Rubygems´ cache or in ven‐
84 dor/cache. Note that if a appropriate platform-specific gem
85 exists on rubygems.org it will not be found.
86
87 --no-cache
88 Do not update the cache in vendor/cache with the newly bundled
89 gems. This does not remove any gems in the cache but keeps the
90 newly bundled gems from being cached during the install.
91
92 --no-prune
93 Don´t remove stale gems from the cache when the installation
94 finishes.
95
96 --path=<path>
97 The location to install the specified gems to. This defaults to
98 Rubygems´ setting. Bundler shares this location with Rubygems,
99 gem install ... will have gem installed there, too. Therefore,
100 gems installed without a --path ... setting will show up by
101 calling gem list. Accordingly, gems installed to other locations
102 will not get listed.
103
104 --quiet
105 Do not print progress information to the standard output.
106 Instead, Bundler will exit using a status code ($?).
107
108 --retry=[<number>]
109 Retry failed network or git requests for number times.
110
111 --shebang=<ruby-executable>
112 Uses the specified ruby executable (usually ruby) to execute the
113 scripts created with --binstubs. In addition, if you use --bin‐
114 stubs together with --shebang jruby these executables will be
115 changed to execute jruby instead.
116
117 --standalone[=<list>]
118 Makes a bundle that can work without depending on Rubygems or
119 Bundler at runtime. A space separated list of groups to install
120 has to be specified. Bundler creates a directory named bundle
121 and installs the bundle there. It also generates a bun‐
122 dle/bundler/setup.rb file to replace Bundler´s own setup in the
123 manner required. Using this option implicitly sets path, which
124 is a [remembered option][REMEMBERED OPTIONS].
125
126 --system
127 Installs the gems specified in the bundle to the system´s
128 Rubygems location. This overrides any previous configuration of
129 --path.
130
131 --trust-policy=[<policy>]
132 Apply the Rubygems security policy policy, where policy is one
133 of HighSecurity, MediumSecurity, LowSecurity, AlmostNoSecurity,
134 or NoSecurity. For more details, please see the Rubygems signing
135 documentation linked below in SEE ALSO.
136
137 --with=<list>
138 A space-separated list of groups referencing gems to install. If
139 an optional group is given it is installed. If a group is given
140 that is in the remembered list of groups given to --without, it
141 is removed from that list.
142
143 --without=<list>
144 A space-separated list of groups referencing gems to skip during
145 installation. If a group is given that is in the remembered list
146 of groups given to --with, it is removed from that list.
147
149 Bundler´s defaults are optimized for development. To switch to defaults
150 optimized for deployment and for CI, use the --deployment flag. Do not
151 activate deployment mode on development machines, as it will cause an
152 error when the Gemfile(5) is modified.
153
154 1. A Gemfile.lock is required.
155
156 To ensure that the same versions of the gems you developed with and
157 tested with are also used in deployments, a Gemfile.lock is
158 required.
159
160 This is mainly to ensure that you remember to check your Gem‐
161 file.lock into version control.
162
163 2. The Gemfile.lock must be up to date
164
165 In development, you can modify your Gemfile(5) and re-run bundle
166 install to conservatively update your Gemfile.lock snapshot.
167
168 In deployment, your Gemfile.lock should be up-to-date with changes
169 made in your Gemfile(5).
170
171 3. Gems are installed to vendor/bundle not your default system loca‐
172 tion
173
174 In development, it´s convenient to share the gems used in your
175 application with other applications and other scripts that run on
176 the system.
177
178 In deployment, isolation is a more important default. In addition,
179 the user deploying the application may not have permission to
180 install gems to the system, or the web server may not have permis‐
181 sion to read them.
182
183 As a result, bundle install --deployment installs gems to the ven‐
184 dor/bundle directory in the application. This may be overridden
185 using the --path option.
186
187
188
190 By default, Bundler installs gems to the same location as gem install.
191
192 In some cases, that location may not be writable by your Unix user. In
193 that case, Bundler will stage everything in a temporary directory, then
194 ask you for your sudo password in order to copy the gems into their
195 system location.
196
197 From your perspective, this is identical to installing the gems
198 directly into the system.
199
200 You should never use sudo bundle install. This is because several other
201 steps in bundle install must be performed as the current user:
202
203 · Updating your Gemfile.lock
204
205 · Updating your vendor/cache, if necessary
206
207 · Checking out private git repositories using your user´s SSH keys
208
209
210
211 Of these three, the first two could theoretically be performed by
212 chowning the resulting files to $SUDO_USER. The third, however, can
213 only be performed by invoking the git command as the current user.
214 Therefore, git gems are downloaded and installed into ~/.bundle rather
215 than $GEM_HOME or $BUNDLE_PATH.
216
217 As a result, you should run bundle install as the current user, and
218 Bundler will ask for your password if it is needed to put the gems into
219 their final location.
220
222 By default, bundle install will install all gems in all groups in your
223 Gemfile(5), except those declared for a different platform.
224
225 However, you can explicitly tell Bundler to skip installing certain
226 groups with the --without option. This option takes a space-separated
227 list of groups.
228
229 While the --without option will skip installing the gems in the speci‐
230 fied groups, it will still download those gems and use them to resolve
231 the dependencies of every gem in your Gemfile(5).
232
233 This is so that installing a different set of groups on another machine
234 (such as a production server) will not change the gems and versions
235 that you have already developed and tested against.
236
237 Bundler offers a rock-solid guarantee that the third-party code you are
238 running in development and testing is also the third-party code you are
239 running in production. You can choose to exclude some of that code in
240 different environments, but you will never be caught flat-footed by
241 different versions of third-party code being used in different environ‐
242 ments.
243
244 For a simple illustration, consider the following Gemfile(5):
245
246
247
248 source ´https://rubygems.org´
249
250 gem ´sinatra´
251
252 group :production do
253 gem ´rack-perftools-profiler´
254 end
255
256
257
258 In this case, sinatra depends on any version of Rack (>= 1.0), while
259 rack-perftools-profiler depends on 1.x (~> 1.0).
260
261 When you run bundle install --without production in development, we
262 look at the dependencies of rack-perftools-profiler as well. That way,
263 you do not spend all your time developing against Rack 2.0, using new
264 APIs unavailable in Rack 1.x, only to have Bundler switch to Rack 1.2
265 when the production group is used.
266
267 This should not cause any problems in practice, because we do not
268 attempt to install the gems in the excluded groups, and only evaluate
269 as part of the dependency resolution process.
270
271 This also means that you cannot include different versions of the same
272 gem in different groups, because doing so would result in different
273 sets of dependencies used in development and production. Because of the
274 vagaries of the dependency resolution process, this usually affects
275 more than the gems you list in your Gemfile(5), and can (surprisingly)
276 radically change the gems you are using.
277
279 When you run bundle install, Bundler will persist the full names and
280 versions of all gems that you used (including dependencies of the gems
281 specified in the Gemfile(5)) into a file called Gemfile.lock.
282
283 Bundler uses this file in all subsequent calls to bundle install, which
284 guarantees that you always use the same exact code, even as your appli‐
285 cation moves across machines.
286
287 Because of the way dependency resolution works, even a seemingly small
288 change (for instance, an update to a point-release of a dependency of a
289 gem in your Gemfile(5)) can result in radically different gems being
290 needed to satisfy all dependencies.
291
292 As a result, you SHOULD check your Gemfile.lock into version control.
293 If you do not, every machine that checks out your repository (including
294 your production server) will resolve all dependencies again, which will
295 result in different versions of third-party code being used if any of
296 the gems in the Gemfile(5) or any of their dependencies have been
297 updated.
298
300 When you make a change to the Gemfile(5) and then run bundle install,
301 Bundler will update only the gems that you modified.
302
303 In other words, if a gem that you did not modify worked before you
304 called bundle install, it will continue to use the exact same versions
305 of all dependencies as it used before the update.
306
307 Let´s take a look at an example. Here´s your original Gemfile(5):
308
309
310
311 source ´https://rubygems.org´
312
313 gem ´actionpack´, ´2.3.8´
314 gem ´activemerchant´
315
316
317
318 In this case, both actionpack and activemerchant depend on activesup‐
319 port. The actionpack gem depends on activesupport 2.3.8 and rack ~>
320 1.1.0, while the activemerchant gem depends on activesupport >= 2.3.2,
321 braintree >= 2.0.0, and builder >= 2.0.0.
322
323 When the dependencies are first resolved, Bundler will select
324 activesupport 2.3.8, which satisfies the requirements of both gems in
325 your Gemfile(5).
326
327 Next, you modify your Gemfile(5) to:
328
329
330
331 source ´https://rubygems.org´
332
333 gem ´actionpack´, ´3.0.0.rc´
334 gem ´activemerchant´
335
336
337
338 The actionpack 3.0.0.rc gem has a number of new dependencies, and
339 updates the activesupport dependency to = 3.0.0.rc and the rack depen‐
340 dency to ~> 1.2.1.
341
342 When you run bundle install, Bundler notices that you changed the
343 actionpack gem, but not the activemerchant gem. It evaluates the gems
344 currently being used to satisfy its requirements:
345
346 activesupport 2.3.8
347 also used to satisfy a dependency in activemerchant, which is
348 not being updated
349
350 rack ~> 1.1.0
351 not currently being used to satisfy another dependency
352
353 Because you did not explicitly ask to update activemerchant, you would
354 not expect it to suddenly stop working after updating actionpack. How‐
355 ever, satisfying the new activesupport 3.0.0.rc dependency of action‐
356 pack requires updating one of its dependencies.
357
358 Even though activemerchant declares a very loose dependency that theo‐
359 retically matches activesupport 3.0.0.rc, Bundler treats gems in your
360 Gemfile(5) that have not changed as an atomic unit together with their
361 dependencies. In this case, the activemerchant dependency is treated as
362 activemerchant 1.7.1 + activesupport 2.3.8, so bundle install will
363 report that it cannot update actionpack.
364
365 To explicitly update actionpack, including its dependencies which other
366 gems in the Gemfile(5) still depend on, run bundle update actionpack
367 (see bundle update(1)).
368
369 Summary: In general, after making a change to the Gemfile(5) , you
370 should first try to run bundle install, which will guarantee that no
371 other gem in the Gemfile(5) is impacted by the change. If that does not
372 work, run [bundle update(1)][bundle-update].
373
375 · Gem install docs
376 http://guides.rubygems.org/rubygems-basics/#installing-gems
377
378 · Rubygems signing docs http://guides.rubygems.org/security/
379
380
381
382
383
384
385 December 2017 BUNDLE-INSTALL(1)