If your Ruby application won't start because of a missing gem, then you must install it locally using Bundler.
Bundler provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions that you need. Bundler prevents dependencies and ensures that the gems you need are present in development, staging, and production. Starting work on a project is as simple as running the bundle install command.
The following describes how to set up and use Bundler for your RubyGem applications.
Setting up Bundler
- Open a terminal window and run the following command:
[server]$ gem install bundler
- Navigate to your project root directory.
- Specify your dependencies in a Gemfile:
source 'https://rubygems.org' gem 'multi_json' gem 'rack'
gem 'rspec', "~>3.7.0'
- Install all of the required gems from your specified sources:
[server]$ bundle install
The second command adds the Gemfile and Gemfile.lock to your repository, which ensures that other developers on your app, as well as your deployment environment, all use the same third-party code that you are using now.
- Inside your app, load up the bundled environment:
This step is only necessary if you are not running RVM.
require 'rubygems' require 'bundler/setup' # require your gems as usual require 'multi_json'
- Run an executable that comes with a gem in your bundle:
[server]$ bundle exec rspec spec/models
In some cases, running executables without bundle exec may work, if the executable happens to be installed in your system and does not pull in any gems that conflict with your bundle. However, this is unreliable and not recommended. Even if it looks like it works, it may not work in the future or on another machine.
- To create a shortcut to gems in your bundle, run the following:
[server]$ bundle install --binstubs
[server]$ bin/rspec spec/models
The executables installed into bin are scoped to the bundle, and will always work.
Creating a RubyGem with Bundler
Bundler is also an easy way to create new gems. Just like you might create a standard Rails project using rails new, you can create a standard gem project with bundle gem. Create a new gem with a README, .gemspec, Rakefile, directory structure, and all the basic boilerplate you need to describe, test, and publish a gem:
[server]$ bundle gem my_gem create my_gem/Gemfile create my_gem/.gitignore create my_gem/lib/my_gem.rb create my_gem/lib/my_gem/version.rb create my_gem/my_gem.gemspec create my_gem/Rakefile create my_gem/README.md create my_gem/bin/console create my_gem/bin/setup create my_gem/CODE_OF_CONDUCT.md create my_gem/LICENSE.txt create my_gem/.travis.yml create my_gem/test/test_helper.rb create my_gem/test/my_gem_test.rb Initializing git repo in ./my_gem