PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Получаване на информация от един Rails сървър към друг

Има много уроци за това как да използвате множество връзки към бази данни в Rails, както и за изграждане на API в Rails. Няколко минути гугъл ще ви дадат много примери. Но ето няколко основни подхода:

За връзки с множество бази данни, прав сте, ще трябва да имате информация за връзката и за двете бази данни, дефинирана във вашия database.yml файл. Пример:

# 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

Rails обаче няма да направи нищо с този допълнителен блок, освен ако изрично не му кажете. Обичайната практика е да се дефинира абстрактен модел ActiveRecord, който ще установи втората връзка:

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

След това създайте нови модели за таблици, които се намират във вашата база данни за отчитане и наследяват от ReportingRecord вместо 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

За изграждането на API има много различни начини да го направите. Независимо от вашия подход, бих ви препоръчал да се уверите, че е достъпен само чрез HTTPS. Ето един основен контролер с едно действие, което отговаря на 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

Този пример изисква да дефинирате токен за достъп във вашия config/secrets.yml файл:

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)

Изборът между API и решение с множество DB зависи най-вече от това как вашето приложение може да се разшири в бъдеще. Подходът с множество DB обикновено е по-лесен за прилагане и има по-висока производителност. Приложният програмен интерфейс (API) има тенденция да се мащабира хоризонтално по-добре и базите данни, които имат връзка само от едно приложение вместо от 2 или повече, обикновено се поддържат по-лесно с течение на времето.

Надявам се това да помогне!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL:ВЪНШЕН КЛЮЧ/КАСКАДА НА ИЗТРИВАНЕ

  2. Как да използвате пакет graphql-type-json с GraphQl

  3. Управление на високата наличност на PostgreSQL – Част I:Автоматично отказване на PostgreSQL

  4. psql:ФАТАЛНО:Удостоверяването на идентификатор не бе успешно за потребител postgres

  5. Агрегатна функция на Postgres за изчисляване на векторна средна скорост на вятъра (векторна величина) и посока на вятъра (векторна посока)