PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Obtendo informações de um servidor Rails para outro


Existem muitos tutoriais sobre como usar várias conexões de banco de dados no Rails, bem como construir uma API no Rails. Alguns minutos de pesquisa no Google lhe darão muitos exemplos. Mas aqui estão algumas abordagens básicas:

Para várias conexões de banco de dados, você está certo, você precisará ter as informações de conexão para ambos os bancos de dados definidos em seu database.yml Arquivo. Exemplo:
# Local Database
development:
  adapter: mysql2
  database: local_db
  username: my_user
  password: my_password
  host: localhost
  port: 3306

# Reporting Database
development_reporting_db:
  adapter: postgresql
  encoding: unicode
  database: reporting
  username: some_user
  password: some_password
  host: 1.2.3.4
  port: 5432

O Rails não fará nada com esse bloco extra, a menos que você o diga explicitamente. A prática comum é definir um modelo abstrato de ActiveRecord que estabelecerá a segunda conexão:
class ReportingRecord < ActiveRecord::Base
  establish_connection( "#{Rails.env}_reporting_db".to_sym )
  self.abstract_class = true
end

Em seguida, crie novos modelos para tabelas que residem em seu banco de dados de relatórios e herdem de ReportingRecord em vez de ActiveRecord::Base :
class SomeModel < ReportingRecord
  # this model sits on top of a table defined in database.yml --> development_reporting_db instead of database.yml --> development
end

Para construir uma API, existem várias maneiras diferentes de fazê-lo. Independentemente da sua abordagem, sugiro que você verifique se ela só é acessível via HTTPS. Aqui está um controlador básico com uma ação que responde a solicitações json:
class ApiController < ApplicationController
  before_filter :restrict_access # ensures the correct api token was passed (defined in config/secrets.yml)
  skip_before_action :verify_authenticity_token # not needed since we're using token restriction

  respond_to :json

  def my_endpoint_action
    render :json => {some_info: 'Hello World'}, :status => 200 # 200 = success
  end

  private
    rescue_from StandardError do |e|
      render :json => {:error => e.message}.to_json, :status => 400 # 400 = bad request
    end

    # ensures the correct api token was passed (defined in config/secrets.yml)
    def restrict_access
      authenticate_or_request_with_http_token do |token, options|
        token == Rails.application.secrets[:my_access_token]
      end
    end
end

Este exemplo exigiria que você defina um token de acesso em seu config/secrets.yml Arquivo:
development:
  secret_key_base: # normal Rails secret key base
  my_api_access_token: # put a token here (you can generate one on the command like using rake secret)

Escolher entre uma API e uma solução de banco de dados múltiplo depende principalmente de como seu aplicativo pode se expandir no futuro. A abordagem de banco de dados múltiplo é normalmente mais fácil de implementar e tem desempenho superior. Uma API tende a escalar horizontalmente melhor e bancos de dados que têm uma conexão de apenas um aplicativo em vez de 2 ou mais tendem a ser mais fáceis de manter ao longo do tempo.

Espero que isto ajude!