EOL.org 採用兩大分離機制:
masochism 插件實現讀寫分離use_db 插件將 Model 分派至不同資料庫
# 兩個抽象基類
class SpeciesSchemaModel < ActiveRecord::Base
self.abstract_class = true
# 連接 environment_data (如 development_data)
end
class LoggingModel < ActiveRecord::Base
self.abstract_class = true
# 連接 environment_logging (如 development_logging)
end
# 具體 Model 繼承對應基類
class Taxon < SpeciesSchemaModel; end
class ActivityLog < LoggingModel; end
# config/database.yml
master_database: # 核心 Rails 資料
master_data_database: # 業務資料
class MasterDatabase < ActiveRecord::Base
self.abstract_class = true
# 直連 master_database
end
class SpeciesSchemaWriter < ActiveRecord::Base
self.abstract_class = true
# 直連 master_data_database
end
# config/environments/production.rb
config.after_initialize do
ActiveReload::ConnectionProxy.setup!
ActiveReload::ConnectionProxy.setup_for SpeciesSchemaWriter, SpeciesSchemaModel
end
# 必須開啟類別快取
config.cache_classes = true
SELECT 無寫操作 → 自動導向 SlaveINSERT/UPDATE/DELETE、execute()) → 強制走 Mastermaster_database = master_data_database = development,無影響日誌屬順寫多讀少,無需讀寫分離,維持簡單單庫架構。
生產環境預設開啟
cache_classes,開發環境若要測試讀寫分離必須手動設為true,否則 masochism 不生效。