PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Pobieranie informacji z jednego serwera Rails do drugiego

Istnieje wiele samouczków na temat korzystania z wielu połączeń z bazą danych w Railsach, a także budowania API w Railsach. Kilka minut Googlingu da ci mnóstwo przykładów. Ale oto kilka podejść szkieletowych:

W przypadku wielu połączeń z bazą danych masz rację, musisz mieć informacje o połączeniu dla obu baz danych zdefiniowane w pliku database.yml plik. Przykład:

# 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

Railsy nie zrobią nic z tym dodatkowym blokiem, chyba że wyraźnie mu to powiesz. Powszechną praktyką jest zdefiniowanie abstrakcyjnego modelu ActiveRecord, który ustanowi drugie połączenie:

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

Następnie utwórz nowe modele dla tabel, które znajdują się w Twojej bazie danych raportowania i dziedziczą z ReportingRecord zamiast 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

Istnieje mnóstwo różnych sposobów tworzenia API. Niezależnie od Twojego podejścia, zdecydowanie sugeruję, abyś upewnił się, że jest dostępny tylko przez HTTPS. Oto podstawowy kontroler z jedną akcją, która odpowiada na żądania 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

Ten przykład wymagałby zdefiniowania tokena dostępu w pliku config/secrets.yml plik:

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)

Wybór między interfejsem API a rozwiązaniem z wieloma bazami danych zależy głównie od tego, jak Twoja aplikacja może się rozwijać w przyszłości. Podejście z wieloma bazami danych jest zazwyczaj łatwiejsze do wdrożenia i ma wyższą wydajność. API ma tendencję do lepszego skalowania w poziomie, a bazy danych, które mają połączenie tylko z jednej aplikacji zamiast z 2 lub więcej, są z czasem łatwiejsze w utrzymaniu.

Mam nadzieję, że to pomoże!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Co to znaczy, że proces PostgreSQL jest bezczynny w transakcji?

  2. Jak włączyć profiler funkcji PostgreSQL?

  3. PostgreSQL - powtarzanie wierszy z LIMIT OFFSET

  4. Dodawanie wielokolumnowego klucza podstawowego do tabeli z 40 milionami rekordów

  5. UWAGI do sekwencji po uruchomieniu migracji w kolejkach w aplikacji postgresql