Last active
December 16, 2015 04:08
-
-
Save eprothro/5374500 to your computer and use it in GitHub Desktop.
Octopus initializer for use with master/slave horizontal DB scaling with a Rails application on the Heroku stack. See the wiki page for more info: https://github.com/tchandy/octopus/wiki/Replication-with-Rails-on-Heroku
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Octopus | |
def self.shards_in(group=nil) | |
config[Rails.env].try(:[], group.to_s).try(:keys) | |
end | |
def self.followers | |
shards_in(:followers) | |
end | |
class << self | |
alias_method :followers_in, :shards_in | |
alias_method :slaves_in, :shards_in | |
end | |
end | |
if Octopus.enabled? | |
count = case (Octopus.config[Rails.env].values[0].values[0] rescue nil) | |
when Hash | |
Octopus.config[Rails.env].map{|group, configs| configs.count}.sum rescue 0 | |
else | |
Octopus.config[Rails.env].keys.count rescue 0 | |
end | |
puts "=> #{count} #{'database'.pluralize(count)} enabled as read-only #{'slave'.pluralize(count)}" | |
if Octopus.followers.count == count | |
Octopus.followers.each{ |f| puts " * #{f.split('_')[0].upcase} #{f.split('_')[1]}" } | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for this!
I'm, however, getting ActiveRecord::ConnectionNotEstablished when none of my models marked as replicated_model. (At this point I do not wish to mark any of my models as such, but rather route specific queries to read only shards.)
Appending this to the file, however, fixes that issue: