Installation
Attempt to install bundler will fail as only root have write access to this part of the operating system. Using sudo
is not a good choice. macOS depends on gems installed there and we do not want to risk violating system integrity.
wojtek@MacBook:~$ gem install bundler
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory.
Instead, we ought to install bundler in another location, preferably /usr/local/bin
directory for non-essential command binaries for all users1. Since this directory does not exist on macOS by default, we will create it manually.
wojtek@MacBook:~$ ls -l /usr | grep local
drwxr-xr-x 3 root wheel 96 Jun 5 20:30 local
wojtek@MacBook:~$ sudo mkdir /usr/local/bin
Permissions must allow write access for users of admin
group. This way they will be able to install software in /usr/local/bin
without using sudo
.
wojtek@MacBook:~$ sudo chown `whoami`:admin /usr/local/bin/
wojtek@MacBook:~$ chmod g+w /usr/local/bin/
wojtek@MacBook:~$ ls -l /usr/local/
total 0
drwxrwxr-x 2 wojtek admin 64 Jun 10 17:01 bin
Installation succeeded without any file permission errors.
wojtek@MacBook:~$ gem install bundler --user-install --bindir /usr/local/bin/
Fetching: bundler-1.16.2.gem (100%)
Successfully installed bundler-1.16.2
Parsing documentation for bundler-1.16.2
Installing ri documentation for bundler-1.16.2
Done installing documentation for bundler after 7 seconds
1 gem installed
Bundle and bundler binaries were installed in /usr/local/bin/
, and bundler ruby gem in ~/.gem/ruby/2.3.0/gems/
.
wojtek@MacBook:~$ ls -l /usr/local/bin/
total 16
-rwxr-xr-x 1 wojtek admin 525 Jun 10 17:17 bundle
-rwxr-xr-x 1 wojtek admin 526 Jun 10 17:17 bundler
wojtek@MacBook:~$ ls -l ~/.gem/ruby/2.3.0/gems/
total 0
drwxr-xr-x 10 wojtek staff 320 Jun 10 17:19 bundler-1.16.2
Usage
Defining dependencies
Specify your dependencies in a Gemfile
in your project’s root:
source "https://rubygems.org"
gem "json"
gem "jekyll"
gem "jekyll-sitemap"
gem "jekyll-feed"
gem "jekyll-paginate"
gem "jekyll-gist"
Installing dependencies
bundle install
installs the dependencies specified in your Gemfile
in the same location as gem install
command. We aim keep them in a separate directory, and --path
option is going to help us with that.
After installation completes bundler creates hidden .bundle
directory with config
file inside of it. We will place our dedicated dependencies
directory in .bundle
as well, so when we finally decide to delete the project the dependencies will get deleted along with it.
wojtek@MacBook:wnagrodzki.com$ bundle install --path '.bundle/dependencies'
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Fetching public_suffix 3.0.2
Installing public_suffix 3.0.2
...
Bundle complete! 6 Gemfile dependencies, 35 gems now installed.
Bundled gems are installed into `./.bundle/dependencies`
Do not forget to commit Gemfile
and Gemfile.lock
. Add .bundle/dependencies
directory to .gitignore
.
Executing commands
To execute a command in the context of the bundle precede it with bundle exec
.
wojtek@MacBook:wnagrodzki.com$ bundle exec jekyll serve
Bundler will look into config
file for the path dependencies are installed. See BUNDLE_PATH
in the listing below.
wojtek@MacBook:wnagrodzki.com$ cat .bundle/config
---
BUNDLE_PATH: ".bundle/dependencies"
Updating dependencies
To update dependencies run bundle update
.
For more information refer to bundler documentation.
-
/usr/local/bin
purpose is defined by Filesystem Hierarchy Standard ↩