sql >> データベース >  >> RDS >> PostgreSQL

あるRailsサーバーから別のサーバーへの情報の取得

    Railsで複数のデータベース接続を使用する方法やRailsでAPIを構築する方法についてのチュートリアルはたくさんあります。グーグルの数分はあなたにたくさんの例を与えるでしょう。しかし、ここにいくつかの最低限のアプローチがあります:

    複数のデータベース接続の場合は、その通りです。両方のデータベースの接続情報を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は、明示的に指示しない限り、この余分なブロックでは何もしません。一般的な方法は、2番目の接続を確立する抽象的な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リクエストに応答する1つのアクションを持つ基本的なコントローラーです:

    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つのアプリケーションからの接続を持つデータベースは、長期にわたって維持しやすい傾向があります。

    これがお役に立てば幸いです!




    1. WHEREINを使用してNULLを返す

    2. Postgres JOIN with unnest

    3. PostgreSQL:.psql_historyから/ dev / null

    4. ユーザー名からuser_groupへのユーザーの操作