I’ve been a Rails developer for a while now so I recently built an app in Sinatra for fun. To help me with this project, I read the Sinatra docs and a lot of blog posts, but nothing really outlined what a basic app needed for setup. Now I’m building my second Sinatra app and I decided to capture my steps so it is easier for you (and tbh, FutureMe) to get started with a basic Sinatra app.

This post assumes a working knowledge of Ruby apps and some Rails background. Also this app does not include a database. The app I’m building is going to use Ruby hashes (all fancied up as ActiveHash) instead of database tables, so if you need a database in your Sinatra app, you’ll need to do some googling to wire up your db.

I once had a full Rails app for yoga playlists. I learned a bunch of yoga a decade ago and naturally, I built an app for it.😂 ¯\(ツ)/¯ It was database-backed and had all of the bells and whistles. When Heroku discontinued its free tier, I chose to kill that app. Now, several years later, I am resurrecting it as a Sinatra app, foregoing a database because Heroku charges extra for databases.💸 Now you know the impetus. Let’s get started!

Getting Started

Let’s get started by creating the main folder for the application via the command line and cding into it:

mkdir yogaposeplaylist && cd "$_"

We’ll need these files for basic app setup. Create them via the command line:

touch application.rb
touch config.ru
touch Gemfile
touch Procfile
touch .ruby-version
touch README.md

Then I like to open the whole project folder in VS Code with:

code .

But you can do whatever you want.

Now let’s add some gems to the Gemfile. At the time of this post, I’m using Ruby 3.2.2, but you should use the latest version of any of Ruby and any of the gems I mention in this post:

# Gemfile

source 'https://rubygems.org'

ruby File.read(".ruby-version").strip

gem 'sinatra'
gem 'puma'
gem 'rake'
gem 'rackup'

Put the Ruby version number in the .ruby-version file:

'3.2.2'

Then bundle the gems by running bundle on the command line:

bundle

You should now see a Gemfile.lock file in your project directory.

We’ll set up our rack configuration here in the config.ru file:

# config.ru

require './application' # <- this is pointing to our application.rb file
run Sinatra::Application

In the Procfile, we’ll need to tell Heroku how we like to run our application. If you’re not planning to deploy your app, you can skip this step.

# Procfile

web: bundle exec ruby application.rb -p $PORT

The next file is the application.rb file, which is the centerpiece of our app. This is where we load all of our necessary dependencies as well as declare our routes. Since I am personally used to the way Rails splits out config from routes and other concerns, so I find this file to be kind of messy. Alas, we’re here in Sinatra to see what it’s like outside of the magic kingdom 🪄 of Rails, right? 😂

We’ll be requiring all of the basic gems we need for the app to run. At this point, we don’t have a lot to add. Paste this code into the application.rb file:

# application.rb

require 'sinatra'

Also keep in mind: Any time you make changes to your application.rb file, you need to restart the server – which I’ll tell you how to do in a bit.

Rendering Content

For now, let’s put a basic “hello world” message on the home page. To do so, add this route with content to the application.rb file:

get '/' do
  'Hello World!'
end

Our application.rb file now looks like this:

# application.rb

# Gems
require 'sinatra'

# Routes
get '/' do
  'Hello World!'
end

In the README.md file, I like to put basic instructions that will help FutureMe remember how to do basic things:

# README
This application uses Sinatra to render yoga poses in playlists.

Run server locally with:
ruby application.rb

In the browser:
http://localhost:4567


## Resources
* Docs: https://sinatrarb.com/intro.html
* Helpers: https://www.sitepoint.com/sinatras-little-helpers/
* Extensions: https://sinatrarb.com/extensions.html

And now it is time to run the app! Just like the README says, on the command line, run just like you would any Ruby file:

ruby application.rb

# You can kill the server with `cmd c`.

Then in the browser go to: http://localhost:4567/

You should see “Hello World!” on the screen. 🎉

And that’s it! That’s a basic Sinatra app. Anne out. 🎤💥


If you’d like to keep going, in this next post, I will be rendering some index and show pages as well as using ActiveHash to organize data without a database.