Configuration Guide
Configuration Overview
Rails Blueprint uses a hierarchical configuration system that allows you to manage settings at multiple levels.
Configuration Hierarchy
- Environment Variables - Highest priority, perfect for secrets
- Rails Credentials - Encrypted, environment-specific secrets
- config/app.yml - Application-wide settings
- Database Settings - Dynamic runtime configuration
Environment Variables
Set up your development environment by copying the example file:
$ cp .env.example .env.development Essential Variables
| Variable | Description | Example |
|---|---|---|
DATABASE_URL | PostgreSQL connection string | postgres://localhost/myapp_dev |
REDIS_URL | Redis connection string | redis://localhost:6379/0 |
SECRET_KEY_BASE | Rails secret key | Generate with: rails secret |
RAILS_ENV | Environment name | development |
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.