Partner links

How to set up a Ruby project structure on Ubuntu 16.10

Ruby language logo

For about two months now I’ve been learning how to code in Ruby using Learn Ruby the Hard Way. Never mind the title, but it’s actually a very good resource for learning how to program in Ruby. The last few exercises that I’ve gone through could have been written better, but overall, it’s a good book for those just getting into the world of software coding.

Exercise 46 of the book, which deals with how to set up a skeleton directory for a Ruby project, shows how to go about it manually. With the right tools installed, however, the same task can be completed automatically, which is what you’re going to learn how to do in this article.

It will help if you have Git installed already. If not, use this article to install it on your favorite Linux distribution, then come back here to continue with this tutorial.

Welcome back!

To begin, you’ll need to install a couple of applications – ruby-bundler and ruby-rspec-core. The former helps you manage Ruby application dependencies and gives you access to the bundle and bundler commands, while the latter gives you access to rspec, a standalone test runner for Ruby RSpec test suites. RSpec is a testing tool for Ruby. Use the command shown below to install both applications.

# Install the following

sudo apt install ruby-bundler ruby-rspec-core


With those two installed, you are now ready to create your project’s skeleton structure, which you do with the following command:

# To create a Ruby project skeleton type
# Replace projectA with the name of your project
# This command will fail if Git is not installed

bundle gem projectA


After running that command, you’ll be asked the following question. My comments come before each question. Note that your answer to the questions will be applied automatically to future projects you create using the bundle gem command above.

# The name of the project is ProjectA. Yours, of course, will be different
# My answer to this question was "rspec". I've never used "minitest", but nothing stops you from using it
 Creating gem 'projectA'...
Do you want to generate tests with your gem?
Type 'rspec' or 'minitest' to generate those test files now and in the future. rspec/minitest/(none):  

# If you answer "y" here, a license file called LICENSE.txt will be populated with the MIT license. Otherwise,
# a license file will not be created 

Do you want to license your code permissively under the MIT license?
This means that any other developer or company will be legally allowed to use your code for free as long as 
they admit you created it. You can read more about the MIT license at y/(n):

# With a "y" answer to this question, a code of conduct file called will be created. Otherwise, 
# it will not be created

Do you want to include a code of conduct in gems you generate?
Codes of conduct can increase contributions to your project by contributors who prefer collaborative, safe spaces. 
You can read more about the code of conduct at Having a code of conduct means agreeing 
to the responsibility of enforcing it, so be sure that you are prepared to do that. Be sure that your email 
address is specified as a contact in the generated code of conduct so that people know who to contact in case 
of a violation. For suggestions about how to enforce codes of conduct, see y/(n):


Once you’ve answered that last question, your project’s files will be generated. The final output will look like this:

# This is the final output of the bundle gem command

Code of conduct enabled in config
      create  projectA/Gemfile
      create  projectA/.gitignore
      create  projectA/lib/projectA.rb
      create  projectA/lib/projectA/version.rb
      create  projectA/projectA.gemspec
      create  projectA/Rakefile
      create  projectA/
      create  projectA/bin/console
      create  projectA/bin/setup
      create  projectA/.travis.yml
      create  projectA/.rspec
      create  projectA/spec/spec_helper.rb
      create  projectA/spec/projectA_spec.rb
      create  projectA/
Initializing git repo in /home/kamit/projectA


Now you can start editing those files and fill in items specific to your project. If Git was properly set up with your credentials using this article, your gemspec file should be populated with the global username and email address you configured for Git. Edit that file to fill in the rest of the information specific to your project.

So there you have it – a skeleton structure for your Ruby project.

How do you run a basic test using RSpec? Change into the project’s directory and type the following command:

# To run a test, you must be in the project's directory, so change into it
# Replace "projectA" with the name of your project

cd projectA

# Then run your first test
# It might fail if your gemspec file is missing vital information


# The output should be of this sort
# > indicates output

> No examples found.

> Finished in 0.00033 seconds (files took 0.0627 seconds to load)
> 0 examples, 0 failures


Ruby language logo



Partner links

Newsletter: Subscribe for updates

Notify of
Inline Feedbacks
View all comments

Get the latest

On social media

Security distros

Linux distros for hacking and pentesting

Crypto mining OS

Distros for mining bitcoin and other cryptocurrencies

Crypto hardware

MSI GeForce GTX 1070
Installing Nvidia GTX 1070 GPU drivers on Ubuntu

Disk guide

Beginner's guide to disks & disk partitions in Linux

Bash guide

Bash shell terminal
How to set the PATH variable in Bash
Hya, what do you think? Please comment.x