How to use multiple databases for one rails 3.1 app in Heroku?

前端 未结 3 858
忘掉有多难
忘掉有多难 2020-12-15 08:53

My Rails 3.1 application connects to 2 databases, one is the default, the other is an Amazon RDS MYSQL instance.

The current database.yml contains two production dat

3条回答
  •  情深已故
    2020-12-15 09:13

    Regarding Neil's answer, here is a way to do it. Not an out-of-box solution, but might give you an idea... /lib/active_record_extensions.rb

    module ActiveRecordExtensions
      class Shard < ActiveRecord::Base
        #need to switch to the shard database connection from heroku config 
        primary_database_url = ENV['PRIMARY_DATABASE_URL']
    
        if(!primary_database_url.nil?)
          parsed_connection_string = primary_database_url.split("://")
          adapter = parsed_connection_string[0]
          parsed_connection_string = parsed_connection_string[1].split(":")
          username = parsed_connection_string[0]
          parsed_connection_string = parsed_connection_string[1].split("@")
          password = parsed_connection_string[0]
          parsed_connection_string = parsed_connection_string[1].split("/")  
          host = parsed_connection_string[0]
          database = parsed_connection_string[1]
    
          establish_connection(
            :adapter  => adapter,
            :host     => host,
            :username => username,
            :password => password,
            :database => database,
            :port     => 3306,
            :pool     => 5,
            :timeout  => 5000
          )
        else
          self.establish_connection "shard_#{Rails.env}"
        end
      end
    
      class ShardMigration < ActiveRecord::Migration
        def connection
          ActiveRecord::Shard.connection 
        end
      end
    end
    

    So your model should just extend ActiveRecord::Shard instead of Base

提交回复
热议问题