Ruby on Rails
Connecting with Ruby on Rails
I am so happy that you landed on this page. I have been writing Rails since version 1.0, and I’m excited that you have chosen Crunchy Bridge, and that you have chosen Rails. Let’s get started.
- Create your Crunchy Bridge Postgres Cluster
- Configure Rails for Postgres
- Connect your Rails to Postgres
- Confirm your app is connecting to your database
- Create your database and load your schema
- Running on a server
Create your Crunchy Bridge Postgres Cluster
Creating a Crunchy Bridge cluster is pretty simple. Log into your Crunchy Bridge account, and click “Create Cluster”, then follow the cluster create form.
From here, we’ll want to get a “connection string” that we can use later. It looks like this:
Once your Postgres cluster has a status of “ready” (a few minutes), click on the “Connections” tab for your connection string.
We will set this value as a
DATABASE_URL value later when connecting to the database.
Configure Rails for Postgres
Configuring Rails for Postgres is pretty simple. If you are starting from scratch, just run:
bash> rails new <rails-app-name> --database=postgresql
If you already have a Rails app and you are converting to using Postgres, then go backup your production database, and do the following. Add the following to your
If you are using Rails 7, write the following to the
<% if ENV['DATABASE_URL'].present? %> <% database_url = URI(ENV['DATABASE_URL']) %> default: &postgres_default adapter: postgresql encoding: unicode url: <%- ENV['DATABASE_URL'] %> production: <<: *postgres_default development: <<: *postgres_default <% elsif Rails.env.production? || Rails.env.staging? %> raise("DATABASE_URL environment variable is required.") <% end %>
Commentary: For database configurations, I would still use environmental variables over
Rails.application.credentials for most situations. It feels wrong to have to commit code to change a database URL.
config/database.yml file above, we use Ruby on Rails 7 convention, which defaults to connecting to the
If you are using a version of Rails 6 or older, write the following to the
<% if ENV['DATABASE_URL'].present? %> <% database_url = URI(ENV['DATABASE_URL']) %> default: &default adapter: postgresql encoding: unicode host: <%= database_url.host %> port: <%= database_url.port %> username: <%= database_url.user %> password: <%= database_url.password %> database: <%= database_url.path[1..-1] %> production: <<: *default development: <<: *default <% end %>
For Rails 6 and older, in the
database.yml above, we use Ruby’s
URI library to extract the values from our connection string that we’ll set in a moment. Then, use ERB to write those values that will be loaded for production and development.
Confirm Rails is connecting to your database
Before you go any farther, it is best to test that your Rails application is connecting to Postgres. Below, where we have
<crunchy-bridge-connection-string>, you will need to insert the connection string value from the very first step above.
If you have a new application, we can test it by running the following:
bash> DATABASE_URL=<crunchy-bridge-connection-string> rails console
rails console starts, run the following:
If successful, you’ll see something like
#<PG::Result:0x0000000106455518 status=PGRES_TUPLES_OK ntuples=1 nfields=1 cmd_tuples=1>.
If unsuccessful, you’ll see something like
rescue in new_client. Check the errors that Rails emits as output, these errors will guide you to a solution. Typically, it’s either:
- Environmental variable not set
database.ymlnot configured properly
Create your database and load your schema
If you are starting from scratch, then it is quite simple, run:
bash> DATABASE_URL=<crunchy-bridge-connection-string> rails db:schema:load
If you are using an existing dataset, see our Migration Guide (or reach out to us, we are happy to help). Dump your data from your existing database, then load it into your Crunchy Bridge database.
Running on a server
On your local machine, you can run your Rails server with the following:
bash> DATABASE_URL=<crunchy-bridge-connection-string> rails server
To move from running on your local machine to running on a server, you’ll need to set the
DATABASE_URL environmental variable on your server or app hosting provider. For app hosting providers, just look for the setting for “environmental variables” or “envvar”.
Once the application is running, your database will connect and use the database on the server.