Build a Serverless Ruby App with Jets in 2 Minutes

Jacob Herrington (he/him) - Aug 14 '19 - - Dev Community

Cover Image: Man Holding Ice Cream Cone Under Cloud by Rakicevic Nenad

There are a number of tools out there for building "serverless" applications, that is applications in which the configuration of the server is someone else's problem. As the developer, you just write the business logic, the engineers at AWS, Netlify, or Google can worry about all that boring infrastructure stuff.

At least, that is the idea.

Today the most popular tool for building serverless applications is probably the Serverless framework. That's a great tool if you're looking to build your application with JavaScript.

However, it has recently become easier to write serverless applications in other languages too!

I'm particularly interested in building software in Ruby, so I am watching the Jets framework. About 98% of Jets is the work of a friend of mine named Tung Nguyen (he's great).

Tung is an AWS expert with a love of Ruby. He chose to build Jets as an interface for building serverless applications powered by AWS with Ruby. It's pretty cool how much work it is able to do for you.

If you want to know more about Tung, he talked about his career on my podcast ๐ŸŽ™

In this tutorial, I'm going to build the most basic app. Well, not quite "Hello, world!" but something pretty simple.

This tutorial assumes you've got Ruby and Bundler installed.

This is a skin-deep exploration of the automation in Jets, and the finished product won't be anything to write home about, but it will give you an idea of how easily Jets can help you prototype with its Rails-like code generation.

The first step is easy. Install Jets:

gem install jets

Hopefully, you see Successfully installed jets-2.0.4 or something similar in your terminal.

Now, we ask Jets to generate an application for us!

jets new example_app

This should spit out a directory with some boilerplate code.

cd example_app
ls -A
.babelrc         .git             .rspec           README.md        config           package.json
.env             .gitignore       Gemfile          Rakefile         config.ru        public
.env.development .jetskeep        Gemfile.lock     app              db               spec
.env.test        .postcssrc.yml   Procfile         bin              node_modules     yarn.lock

We can now ask Jets to generate some code for our application:

jets generate scaffold post title:string

You should see something like this:

INFO: You're missing AWS credentials. Only local services are currently available
      invoke  active_record
      create    db/migrate/20190814012442_create_posts.rb
      create    app/models/post.rb
      invoke  resource_route
       route    resources :posts
      invoke  scaffold_controller
      create    app/controllers/posts_controller.rb
      invoke    erb
      create      app/views/posts
      create      app/views/posts/index.html.erb
      create      app/views/posts/edit.html.erb
      create      app/views/posts/show.html.erb
      create      app/views/posts/new.html.erb
      create      app/views/posts/_form.html.erb
      invoke    helper
      create      app/helpers/posts_helper.rb

Don't worry too much about the AWS credentials, we won't be deploying this toy app to AWS (though if you care to do the AWS setup, it is entirely possible to deploy this app).

Now, we need to ask Jets to spin up a database for us:

jets db:create db:migrate

This should create a database for you and run the migrations that were generated by our scaffold.

At this point, if we start the server, we should be able to interact with the posts resource.

jets server

Navigate to localhost:8888/posts and you should be greeted by the following UI:

A screenshot of the basic UI generated by Jets

By clicking the New Post link, you should be able to create a new Post resource.

At this point, you're able to perform basic CRUD actions on that resource:

A screenshot of the UI that Jets built for the Post resource

That's all it takes to build a local Jets application. In a future tutorial, I'll explain how each Ruby file maps to an AWS feature and how to deploy the application to AWS for a truly serverless Ruby application.

In the meantime, check out the project on GitHub and help Tung out with a few PRs. ๐Ÿค 

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player