Configuration Guide

Configuration Overview

Rails Blueprint uses a hierarchical configuration system that allows you to manage settings at multiple levels.

Configuration Hierarchy
  1. Environment Variables - Highest priority, perfect for secrets
  2. Rails Credentials - Encrypted, environment-specific secrets
  3. config/app.yml - Application-wide settings
  4. Database Settings - Dynamic runtime configuration

Environment Variables

Set up your development environment by copying the example file:

$ cp .env.example .env.development 

Essential Variables

VariableDescriptionExample
DATABASE_URLPostgreSQL connection stringpostgres://localhost/myapp_dev
REDIS_URLRedis connection stringredis://localhost:6379/0
SECRET_KEY_BASERails secret keyGenerate with: rails secret
RAILS_ENVEnvironment namedevelopment

Application Configuration

The main configuration file is code config/app.yml | . Initialize it with:

$ rails blueprint:init 

Sample Configuration

defaults: &defaults
  app_name: "My Rails App"
  app_host: "localhost:3000"
  app_protocol: "http"

  features:
    user_registration: true
    social_login: true
    two_factor_auth: false

  limits:
    max_upload_size: 10.megabytes
    api_rate_limit: 100

development:
  <<: *defaults
  app_host: "localhost:3000"

production:
  <<: *defaults
  app_host: "myapp.com"
  app_protocol: "https" 
Access configuration in your code with: Rails.configuration.app[:app_name]

Database Configuration

Basic Setup

# config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development
  username: myapp
  password: <%= ENV["DATABASE_PASSWORD"] %>
  host: localhost 

Connection Pooling

Optimize database connections for your application:

Development
pool: 5
timeout: 5000 
Production
pool: <%= ENV["DB_POOL"] || 25 %>
timeout: 5000
reaping_frequency: 10 

Redis & Caching Configuration

Redis Setup

# config/initializers/redis.rb
Redis.current = Redis.new(
  url: ENV.fetch("REDIS_URL", "redis://localhost:6379/0"),
  timeout: 1
) 

Cache Store Configuration

# config/environments/production.rb
config.cache_store = :redis_cache_store, {
  url: ENV["REDIS_URL"],
  expires_in: 1.hour,
  namespace: "cache",
  pool: {
    size: 5,
    timeout: 5
  }
} 
Remember to configure Redis for ActionCable and session storage as well.

Email Configuration

SMTP Configuration

# config/environments/production.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address: ENV["SMTP_ADDRESS"],
  port: ENV["SMTP_PORT"],
  domain: ENV["SMTP_DOMAIN"],
  user_name: ENV["SMTP_USERNAME"],
  password: ENV["SMTP_PASSWORD"],
  authentication: :plain,
  enable_starttls_auto: true
} 

SendGrid Configuration

# Gemfile
gem 'sendgrid-ruby'

# config/initializers/sendgrid.rb
ActionMailer::Base.smtp_settings = {
  address: 'smtp.sendgrid.net',
  port: 587,
  authentication: :plain,
  user_name: 'apikey',
  password: ENV['SENDGRID_API_KEY'],
  enable_starttls_auto: true
} 

AWS SES Configuration

# Gemfile
gem 'aws-sdk-ses'

# config/environments/production.rb
config.action_mailer.delivery_method = :ses
config.action_mailer.ses_settings = {
  access_key_id: ENV['AWS_ACCESS_KEY_ID'],
  secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
  region: 'us-east-1'
} 

File Storage Configuration

Active Storage with S3

# config/storage.yml
amazon:
  service: S3
  access_key_id: <%= ENV["AWS_ACCESS_KEY_ID"] %>
  secret_access_key: <%= ENV["AWS_SECRET_ACCESS_KEY"] %>
  region: us-east-1
  bucket: <%= ENV["AWS_BUCKET"] %>

# config/environments/production.rb
config.active_storage.service = :amazon 

Local Storage (Development)

# config/storage.yml
local:
  service: Disk
  root: <%= Rails.root.join("storage") %>

# config/environments/development.rb
config.active_storage.service = :local 
Best Practice

Use environment-specific storage services to avoid mixing development and production files.

Pro Tip

Configure CDN for production Active Storage URLs to improve performance.

Start creating your next app now