Dynomite DynamoDB Getting Started Learn Guide
Important: These docs are for the outdated Jets 5 versions and below. For the latest Jets docs: docs.rubyonjets.com
This learn guide shows you how to get started with Dynomite and Dynamodb.
Important: Dynomite v2 requires Jets v5 and above.
The source code for this guide is available at: rubyonjets/demo-dynomite.
New Project
First, generate a new project.
jets new demo
cd demo
Install Gem
We’ll add the dynomite gem to the Gemfile
bundle add dynomite
Scaffold
Let’s generate a posts scaffold.
jets generate scaffold post title:string body:text published:boolean
Note, we’re using (abusing) the scaffold generator for ActiveRecord models. Since Dynomite is ActiveModel compatible, it’ll work with only a few slight adjustments. This one of the beautiful things about dynomite v2 being ActiveModel compatible. Let’s make those adjustments next.
Item Modeling
If you do not yet have an ApplicationItem
base model, you can generate one.
❯ jets generate application_item
create app/models/application_item.rb
Now update the Post
class so it’s an ApplicationItem
instead of an ApplicationRecord
.
app/models/post.rb
class Post < ApplicationItem
field :title
field :body
field :published, type: :boolean
end
Since DynamoDB is a key-value store database, we can define the schema much more dynamically. Essentially, on-the-fly with the model definition.
Migration
We still want to use migration files to manage and create new tables programmatically in a controlled manner instead of manually creating the tables and increasing the chances of ending with inconsistency between development vs. production.
Note, we do not need to use the ActiveRecord migration files that was generated as part of the scaffolding, so remove that.
rm -f db/migrate/*_create_posts.rb
Now, we’ll generate the dynamodb migration files.
jets dynamodb:generate create_posts --partition-key id
Dynomite migrations work similarly to ActiveRecord migrations with a DSL. Let’s run the migrations.
jets dynamodb:migrate
This will create a namespaced table called demo-dev_posts
and a demo-dev_schema_migrations
table to track migrations statuses.
Finish
At this point, you should have a working Jets application with posts wired to a DynamoDB storage backend.
Removing ActiveRecord
If you do not need ActiveRecord at all, you can remove the mysql2 or whatever database adapter you have in your Gemfile. You can also remove these files:
config/database.yml
app/models/application_record.rb
Note: Do not remove it until the end because the scaffold relies on ActiveRecord.