When it comes to deploying web applications, choosing the right platform can significantly impact development efficiency and overall performance. The Render platform offers a powerful and user-friendly solution for deploying Rails apps. In this tutorial, I'll walk you through a step-by-step guide on how to deploy your Rails + PostgreSQL applications on Render.
Creating Build Script
The first step in preparing your Rails app for deployment is to create a custom build script. This script will allow you to define specific steps required to build your application. To create the script, follow these steps:
Step 1. Open your Rails project's directory.
Step 2. Create a new file named render-build.sh
inside bin
directory.
Step 3. Paste the following script. You can also add the necessary build steps, such as installing node dependencies and compiling assets
#!/usr/bin/env bash
# exit on error
set -o errexit
bundle install
bundle exec rake assets:precompile
bundle exec rake assets:clean
bundle exec rake db:migrate
Step 4. To ensure bin/render-build.sh
script is executable, run the following command in your terminal:
chmod a+x bin/render-build.sh
Configuring Database and Environment Files
Several configurations need to be updated before deploying your Rails app on Render.
Step 1. Update config/database.yml
with the following changes.
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
Step 2. Open config/puma.rb
and uncomment the following lines.
max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
threads min_threads_count, max_threads_count
port ENV.fetch("PORT") { 3000 }
environment ENV.fetch("RAILS_ENV") { "development" }
pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
workers ENV.fetch("WEB_CONCURRENCY") { 4 }
preload_app!
plugin :tmp_restart
Step 3. Enable public file server in config/environments/production.rb
.
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? || ENV['RENDER'].present?
Step 4. Make sure that your project has config/master.key
file. If you don't have a master key yet, delete credentials.yml.enc
and run this command to generate a new one.
EDITOR="code --wait" rails credentials:edit
Setting up PostgreSQL database
Render simplifies the process of setting up a PostgreSQL database for your Rails app. Follow these steps to get your database up and running:
Step 1. Log in to your Render dashboard.
Step 2. Create a new PostgreSQL database.
Step 3. Provide a name for your database.
Step 4. For database and username values, use the ones specified in config/database.yml
.
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
database: your_database
username: your_user
password: <%= ENV["YOUR_APP_DATABASE_PASSWORD"] %>
Step 5. Copy the generated Internal Database URL and Password as you'll need them later.
Deployment
With your app and database configurations in place, it's time to deploy on Render.
- On Render dashboard, click New and choose Web Service.
- Select Ruby as the environment.
- In the Commands section, specify the build and start commands.
- Build :
./bin/render-build.sh
- Start :
bundle exec puma -C config/puma.rb
- Build :
- Next, add the necessary environment variables:
DATABASE_URL
: User the Internal Database URL you copied earlier.YOUR_APP_DATABASE_PASSWORD
: Use the Password you copied.RAILS_MASTER_KEY
: Add the key fromconfig/master.key
- Finally, click Create Web Service to deploy your application.
Conclusion
Congratulations! You've successfully deployed your Rails app on the Render platform. I hope you found this step-by-step guide helpful in successfully deploying your own application. If you have any further questions or need additional guidance, feel free to reach out to me.
Happy Coding!