Whatever your reasons are for choosing to learn Ruby on Rails, they were the right ones! Rails is an excellent framework for quickly building feature-rich, scalable, and secure web apps.
In the forward of The Rails 3 Way (required reading for all new Rails devs) Mr. Fernandez states,
…Rails frees you to kick off your project with a bang, getting a working prototype out the door quickly. This makes it possible to build an application with some meat on its bones in a few weekends, making Rails the web framework of choice for people with a great idea and a full time job.
Whether you are building a prototype or an enterprise-level application; whether you are a full-time dev or a weekend hacker, the key message is that you can get a QUALITY Rails app up FAST. Gems are a cornerstone of this fact.
In my other post, Ruby Version Manager (RVM) for Rails Newbs, I discuss how Rails itself is a Ruby gem. While Rails is the king of gems, there are many more the Rails newb should get acquainted with early in their career.
The purpose of this post is to introduce the Rails newb to a handful of gems offering low cost (time) and high return (features!). Another important characteristic of all the below gems is their licensing terms. These gems can be used freely – including commercial use.
Newb Note! The “Ease of Implementation” guidance given below is not intended to be exhaustive. It’s intended to highlight the ease with which a given gem’s base functionality can be enabled. Many of these gems have a rich capability set that requires further reading to completely unlock. This post will get you started and give you some perspective, but plan to read the source docs to get the most from the gem.
Knowing all that, let’s talk gems. Here’s a table of contents for this post if you’d like to jump to a particular gem.
1. DEVISE (source code)
What does it do? Any modern web app, must have user “authentication” – meaning users can create credentials (e-mail and password) and have those credentials stored in the application’s database for future use. Given the importance of authentication, it’s included first in our list.
Ease of Implementation: Beyond the usual Gemfile inclusion and bundle install
, Devise requires just a bit of configuration to get running. The good news is that these instructions are well documented in the README.
Environments: Place it at the root level of your gem file so it’s available across dev, test, and production.
Newb Note! Devise’s default configuration is good, but you can make it great by turning on some additional built-in features. For example, you might want to add a “username” field (the default for sign-in is e-mail + password). Or you might want to use the “confirmable” option so users are required to confirm ownership of their provided e-mail address by clicking a link in a system generated e-mail. These options too are well documented.
Recommended Resources:
2. TWITTER BOOTSTRAP (source code)
What does it do? Twitter Bootstrap provides clean, modern, and professional CSS styling for a number of common web app elements like navigation bars, buttons, icons, fonts, and much more.
Ease of Implementation: Installation and base configuration are quite easy and well documented in the README. Depending on your familiarity with HTML and CSS, the harder (but not hard) part is choosing which elements to use and getting them properly embedded in your Views. If you are confused by that statement regarding “Views” have a read of my post Reading Rails: MVC and Scaffolding for Rails Newbs.
Environments: In Rails 3, you’ll want to place Twitter Bootstrap in the “asset” group in your gemfile. In Rails 4, there is no asset group so go ahead and place it at the root level so it’s available in all environments.
Newb Note! I’m embarrassed to admit this, but in my own newb-ness at first I was confused about how to implement Bootstrap’s examples in my own projects. I followed the gem instructions, but then what? Where was my beautiful carousel and navigation? One of my first, very patient Rails mentors @lostincode told me to just right click and “View Source” on the target example’s web page. Then just copy the relevant code and drop it into your Rails app. After you’ve done this a few times, you have a library and favorite code that you can move between projects.
Recommended Resources:
- http://getbootstrap.com/css/
- http://getbootstrap.com/components/
- http://railscasts.com/episodes/328-twitter-bootstrap-basics
- http://railscasts.com/episodes/329-more-on-twitter-bootstrap
3. PG also known as POSTGRESQL (source code)
What does it do? Just about any web app you build needs to ultimately move off your development machine and onto the internet. Thankfully for Rails newbs, Heroku makes this very easy and free. Heroku’s only requirement is that you run a PostgreSQL database in production instead of Rails’ default of SQLite. The PG gem is the ticket.
Ease of Implementation: It’s really quite easy to set your production DB to PostgreSQL via the gemfile. Instead of the gem’s own README, I suggest having a read of Heroku’s guidance at Getting Started with Rails on Heroku.
Environments: You’re definitely going to want it in your group :production do
group if deploying to Heroku. Whether you also use it in dev or test, is up to you.
Newb Note! While purists will argue you should run PostgreSQL locally in development to ensure a mirror with production, many (not all!) Rails app scenarios will handle SQLite in dev and PG in production just fine. It’s acceptable for newbs to start with this approach and as you get further along in your Rails journey, then you can go about getting PostgreSQL running locally via instructions like these. Once you have PG running locally, when creating future Rails apps (that you plan to deploy to Heroku) I recommend telling Rails that you want a PG database from the get go. Here’s how to modify your $ rails new
accordingly:
$ rails new myapp --database=postgresql
Recommended Resources:
4. PRY-DEBUGGER (source code)
What does it do? Pry-Debugger can be used in both development and test environments to “pause” your application mid-stream at a point you specify. Once paused, you can interrogate and evaluate variables or params. For example, if you want to see what information is being passed from a view’s form into your controller, pause the app in the controller action triggered by the form submit button.
Ease of Implementation: It’s so, so easy to install and requires effectively no configuration. After including in your gemfile and running bundle install, simply drop binding.pry
into your codebase (likely in your Controller or Model) just after code you want to evaluate after the application “pauses”. Then, trigger the target action in your browser (or via your test spec) . When the application hits your binding.pry
, go to your terminal/console and go crazy!
Environments: I recommend creating a gem group for both dev and test with something like group :development, :test do
. Pry-Debugger should go here.
Newb Note! Pry-Debugger is built upon the original Pry but also includes some additional commands such as step
, next
, finish
, and continue
. Check out the README for a quick explanation of these commands.
Recommended Resources:
5. BETTER ERRORS (source code)
What does it do? No matter what, your app is going to puke from time to time. The least you can do for yourself is to have easy-to-clean-up puke. This is where Better Errors comes in. It provides cleanly formatted errors with log details in the browser just a click-away.
Ease of Implementation: So easy, there’s really no excuses not to use it. Put it in your gemfile and bundle install. That’s it.
Environments: I recommend group :development do
for Better Errors.
Newb Note! As per the README, make sure to check out the complementary gem “binding_of_caller“, which gives you functionality similar to Pry-Debugger (described above) – but this functionality is inside your web browser when a better_errors’ error is thrown.
Recommended Resources:
6. LAUNCHY (source code)
What does it do? Sometimes when your test specs are failing, the error messages just aren’t informative enough – you need to see what the test is seeing in the browser. This can be especially maddening when everything appears to be fine in the browser in the development environment, but your tests are failing. Here comes Launchy to the rescue!
Ease of Implementation: Put it in your gemfile, bundle install, and include save_and_open_page
inside your test spec where you want to browser to open.
Environments: As per the description, you only need Launchy in your group :test do
block.
Newb Note! Dont’ forget to remove save_and_open_page
after you’ve resolved your issue.
Recommended Resources:
- http://railscasts.com/episodes/257-request-specs-and-capybara (Launchy is just a small piece of this tutorial)
7. RAILS-ERD (source code)
What does it do? Rails-ERD generates a visual representation of your database schema – including tables, fields, and relationships. Personally, there’s a few scenarios where I like to use this gem.
- Getting up to speed on an existing project when I’m a new team member
- When I want to get another dev up to speed one of my existing projects
- For planning purposes when I know I need to change my database architecture in a material way
- To facilitate design discussions with more-technical clients and project decision makers
- Returning to project that may have been dormant for some time
Ease of Implementation: In addition to the requisite inclusion in your gemfile and bundle install – you’ll need to install Graphviz. It’s all quite easy and laid out here. After setup, you can run rake erd
at any time to generate an up-to-date diagram.
Environments: I put Rails-ERD in my group :development do
block.
Newb Note! Personally, I like to use this gem once my project is up and running and the schema starts to get more complicated. However, a related best-practice that I recommend is to use a similar tool to create a draft of your intended schema before you write a single line of code. Personally, I’ve been mostly pleased with the Sea Quail Database Diagram Tool. What it lacks in features, it makes up for in ease of use. I don’t have deep experience with the multitude of options that are just a search engine away. Please comment on this post if you recommendations for other ERD design tools!
Recommended Resources:
8. BRAKEMAN (source code)
What does it do? I’m no security expert, so I really appreciate a tool that helps me easily identify, interpret, and resolve security issues in my Rails app. Enter Brakeman.
Ease of Implementation: In addition to the requisite inclusion in your gemfile and bundle install – you just put brakeman
into your command line from the application root directory.
Environments: I put Brakeman my group :development do
block.
Newb Note! As per the README, don’t forget to include :require => false
in your gemfile when inserting Brakeman. Also, if you’d like to go deeper on Rails security, check out my other post Security is a Feature: 9 Newb-Friendly Steps to Securing Your Rails Apps
Recommended Resources:
- http://brakemanscanner.org
- http://bendyworks.com/geekville/tutorials/2012/11/testing-security-with-brakeman
9. FAKER (source code)
What does it do? Sometimes having a robust set of data in your development database makes the testing and development process go much smoother. Entering it through the browser is a fool’s errand (and it’s retained if you reset your DB). Seeds.rb files are a big help, but you still have to come up with the actual values to be entered. Not anymore with Faker. Faker provides random values for names, cities, addresses (physical and internet) – even lorem ipsum text.
Ease of Implementation: You know the drill – put it in your gemfile and run bundle install. Next, incorporate the Faker syntax in either your seeds.rb or a rake tasks. Here’s some sample Faker syntax so you can see just how easy it is.
Faker::Name.name
#=> “Christophe Bartell”
Faker::Internet.email
#=> “kirsten.greenholt@corkeryfisher.info”
Environments: I recommend creating a gem group for gems used in both dev and test with something like group :development, :test do
. Faker should go here (you can use Faker in in your tests!).
Newb Note! Check out the README for a full inventory of the fields Faker provides.
Recommended Resources:
- http://www.robbyonrails.com/articles/2009/09/05/planting-the-seeds (Faker in seeds.rb)
- http://www.idolhands.com/ruby-on-rails/gems-plugins-and-engines/using-faker-to-pre-populate-a-dev-database (Faker in rake task)
10. FONT-AWESOME (source code)
What does it do? These guys take icons really seriously. They use them stand-alone, but also embed them with buttons, navbars, and form inputs. Remember,
a picture is worth a thousand words
Ease of Implementation: Just like Twitter Bootstrap, just add Font Awesome to your gem file, run bundle install, and start embedding the syntax for the desired icons and styling into your html.erb Views.
Environments: Place it at the root level of your gem file so it’s available across dev, test, and production.
Newb Note! Font Awesome plays well with Twitter Bootstrap (#2 in our gem list). Use the two together to build a highly polished product!
Recommended Resources:
- http://fortawesome.github.io/Font-Awesome/examples/
- http://fortawesome.github.io/Font-Awesome/icons/
SUMMARY
As with most of my posts, if you’ve gotten this far – congratulations and thank you! If I’ve left out any low cost, high benefit gems of note – please comment!
Here’s a few other posts of mine you might like:
Great post! There’s a couple in here I was happy to learn about.