sql >> Database >  >> RDS >> PostgreSQL

Informatie van de ene Rails-server naar de andere krijgen

Er zijn tal van tutorials over het gebruik van meerdere databaseverbindingen in Rails en het bouwen van een API in Rails. Een paar minuten Googlen geeft je genoeg voorbeelden. Maar hier zijn een paar barebone-benaderingen:

Voor meerdere databaseverbindingen hebt u gelijk, u moet de verbindingsinformatie voor beide databases hebben gedefinieerd in uw database.yml het dossier. Voorbeeld:

# 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 zal echter niets doen met dit extra blok, tenzij je het expliciet aangeeft. De gebruikelijke praktijk is om een ​​abstract ActiveRecord-model te definiëren dat de tweede verbinding tot stand zal brengen:

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

Maak vervolgens nieuwe modellen voor tabellen die zich in uw rapportagedatabase bevinden en erven van ReportingRecord in plaats van 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

Voor het bouwen van een API zijn er talloze verschillende manieren om dit te doen. Ongeacht uw aanpak, raad ik u ten zeerste aan ervoor te zorgen dat deze alleen toegankelijk is via HTTPS. Hier is een basiscontroller met één actie die reageert op json-verzoeken:

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

In dit voorbeeld moet u een toegangstoken definiëren in uw config/secrets.yml bestand:

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)

Kiezen tussen een API en een oplossing met meerdere databases hangt grotendeels af van hoe uw toepassing in de toekomst zou kunnen uitbreiden. De benadering met meerdere databases is doorgaans eenvoudiger te implementeren en levert betere prestaties. Een API heeft de neiging om horizontaal beter te schalen en databases die een verbinding hebben van slechts één applicatie in plaats van twee of meer, zijn over het algemeen gemakkelijker te onderhouden in de loop van de tijd.

Ik hoop dat dit helpt!




  1. orakel drop-index indien bestaat

  2. Waarom duurt het soms zo lang voordat een invoegquery is voltooid?

  3. Gefaseerde APPL_TOP in Oracle Applications R12

  4. Inhoud van een gegevenstabel afdrukken