PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Obtenir des informations d'un serveur Rails à un autre

Il existe de nombreux tutoriels sur l'utilisation de plusieurs connexions de base de données dans Rails ainsi que sur la création d'une API dans Rails. Quelques minutes de recherche sur Google vous donneront plein d'exemples. Mais voici quelques approches simples :

Pour plusieurs connexions de base de données, vous avez raison, vous aurez besoin d'avoir les informations de connexion pour les deux bases de données définies dans votre database.yml dossier. Exemple :

# 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

Les rails ne feront rien avec ce bloc supplémentaire à moins que vous ne le disiez explicitement. La pratique courante consiste à définir un modèle abstrait ActiveRecord qui établira la seconde connexion :

class ReportingRecord < ActiveRecord::Base
  establish_connection( "#{Rails.env}_reporting_db".to_sym )
  self.abstract_class = true
end

Ensuite, créez de nouveaux modèles pour les tables qui résident dans votre base de données de rapports et héritent de ReportingRecord au lieu 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

Pour créer une API, il existe des tonnes de façons différentes de le faire. Quelle que soit votre approche, je vous suggère fortement de vous assurer qu'il n'est accessible que via HTTPS. Voici un contrôleur de base avec une action qui répond aux requêtes 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

Cet exemple nécessiterait que vous définissiez un jeton d'accès dans votre config/secrets.yml fichier :

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)

Le choix entre une API et une solution à bases de données multiples dépend principalement de la manière dont votre application pourrait se développer à l'avenir. L'approche à bases de données multiples est généralement plus facile à mettre en œuvre et offre des performances supérieures. Une API a tendance à mieux évoluer horizontalement et les bases de données qui ont une connexion à partir d'une seule application au lieu de 2 ou plus ont tendance à être plus faciles à entretenir au fil du temps.

J'espère que cela vous aidera !