Configuration
Azu provides a comprehensive configuration system for managing application settings, environment-specific values, and runtime behavior.
Azu::Configuration
The main configuration class for Azu applications.
Properties
port : Int32
port : Int32Server port number (default: 3000).
Azu.configure do |config|
config.port = 8080
endhost : String
host : StringServer host address (default: "0.0.0.0").
Azu.configure do |config|
config.host = "localhost"
endenvironment : String
environment : StringApplication environment (default: "development").
Azu.configure do |config|
config.environment = "production"
enddebug : Bool
debug : BoolEnable debug mode (default: false).
Azu.configure do |config|
config.debug = true
endssl : Bool
ssl : BoolEnable SSL/TLS (default: false).
Azu.configure do |config|
config.ssl = true
endssl_cert : String?
ssl_cert : String?Path to SSL certificate file.
Azu.configure do |config|
config.ssl_cert = "/path/to/cert.pem"
endssl_key : String?
ssl_key : String?Path to SSL private key file.
Azu.configure do |config|
config.ssl_key = "/path/to/key.pem"
endEnvironment Configuration
Development Environment
if Azu::Environment.development?
Azu.configure do |config|
config.debug = true
config.port = 3000
end
endProduction Environment
if Azu::Environment.production?
Azu.configure do |config|
config.debug = false
config.port = 80
config.ssl = true
end
endEnvironment Variables
Azu.configure do |config|
config.port = ENV["PORT"]?.try(&.to_i) || 3000
config.host = ENV["HOST"]? || "0.0.0.0"
config.environment = ENV["ENVIRONMENT"]? || "development"
config.debug = ENV["DEBUG"]? == "true"
endDatabase Configuration
Database URL
Azu.configure do |config|
config.database_url = ENV["DATABASE_URL"]? || "sqlite3://./app.db"
endConnection Pool
Azu.configure do |config|
config.database_pool_size = 10
config.database_pool_timeout = 5.seconds
endCache Configuration
Redis Configuration
Azu.configure do |config|
config.redis_url = ENV["REDIS_URL"]? || "redis://localhost:6379"
config.redis_pool_size = 5
endMemory Cache
Azu.configure do |config|
config.cache_type = :memory
config.cache_size = 1000
config.cache_ttl = 1.hour
endLogging Configuration
Log Level
Azu.configure do |config|
config.log_level = :info
endLog Format
Azu.configure do |config|
config.log_format = :json
endLog File
Azu.configure do |config|
config.log_file = "/var/log/azu/app.log"
endSecurity Configuration
CORS Settings
Azu.configure do |config|
config.cors_origins = ["http://localhost:3000", "https://example.com"]
config.cors_methods = ["GET", "POST", "PUT", "DELETE"]
config.cors_headers = ["Content-Type", "Authorization"]
config.cors_credentials = true
endCSRF Protection
Azu.configure do |config|
config.csrf_secret = ENV["CSRF_SECRET"]? || "your-secret-key"
config.csrf_token_header = "X-CSRF-Token"
endRate Limiting
Azu.configure do |config|
config.rate_limit_requests = 100
config.rate_limit_window = 1.minute
config.rate_limit_storage = :memory
endTemplate Configuration
Template Directory
Azu.configure do |config|
config.template_directory = "src/templates"
endTemplate Engine
Azu.configure do |config|
config.template_engine = :jinja2
endHot Reload
Azu.configure do |config|
config.template_hot_reload = Azu::Environment.development?
endWebSocket Configuration
WebSocket Settings
Azu.configure do |config|
config.websocket_timeout = 30.seconds
config.websocket_max_connections = 1000
endChannel Configuration
Azu.configure do |config|
config.channel_prefix = "/ws"
config.channel_authentication = true
endPerformance Configuration
Worker Threads
Azu.configure do |config|
config.worker_threads = 4
endRequest Timeout
Azu.configure do |config|
config.request_timeout = 30.seconds
endResponse Compression
Azu.configure do |config|
config.compression = true
config.compression_level = 6
endMonitoring Configuration
Metrics
Azu.configure do |config|
config.metrics_enabled = true
config.metrics_port = 9090
endHealth Checks
Azu.configure do |config|
config.health_check_path = "/health"
config.health_check_interval = 10.seconds
endConfiguration Files
YAML Configuration
# config/development.yml
port: 3000
host: localhost
debug: true
database_url: sqlite3://./app.db# Load YAML configuration
config = YAML.parse(File.read("config/development.yml"))
Azu.configure do |c|
c.port = config["port"].as_i
c.host = config["host"].as_s
c.debug = config["debug"].as_bool
c.database_url = config["database_url"].as_s
endJSON Configuration
{
"port": 3000,
"host": "localhost",
"debug": true,
"database_url": "sqlite3://./app.db"
}# Load JSON configuration
config = JSON.parse(File.read("config/development.json"))
Azu.configure do |c|
c.port = config["port"].as_i
c.host = config["host"].as_s
c.debug = config["debug"].as_bool
c.database_url = config["database_url"].as_s
endConfiguration Validation
Required Settings
Azu.configure do |config|
config.port = ENV["PORT"]?.try(&.to_i) || raise "PORT environment variable is required"
config.database_url = ENV["DATABASE_URL"]? || raise "DATABASE_URL environment variable is required"
endSetting Validation
Azu.configure do |config|
config.port = ENV["PORT"]?.try(&.to_i) || 3000
raise "Port must be between 1 and 65535" unless (1..65535).includes?(config.port)
endConfiguration Inheritance
Base Configuration
# config/base.cr
module BaseConfig
def self.configure
Azu.configure do |config|
config.host = "0.0.0.0"
config.debug = false
end
end
endEnvironment-specific Configuration
# config/development.cr
module DevelopmentConfig
def self.configure
BaseConfig.configure
Azu.configure do |config|
config.debug = true
config.port = 3000
end
end
endConfiguration Testing
Test Configuration
# spec/spec_helper.cr
Azu.configure do |config|
config.port = 0 # Random port for testing
config.debug = false
config.database_url = "sqlite3://:memory:"
endConfiguration Validation Tests
describe "Configuration" do
it "validates required settings" do
expect_raises(ArgumentError) do
Azu.configure do |config|
config.port = 0 # Invalid port
end
end
end
endNext Steps
Learn about Error Handling
Explore Performance Optimization
Understand Environment Management
Last updated
Was this helpful?
