PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Lấy thông tin từ một máy chủ Rails này đến một máy chủ Rails khác

Có rất nhiều hướng dẫn về cách sử dụng nhiều kết nối cơ sở dữ liệu trong Rails cũng như xây dựng một API trong Rails. Một vài phút sử dụng Google sẽ cung cấp cho bạn rất nhiều ví dụ. Nhưng đây là một số cách tiếp cận đơn giản:

Đối với nhiều kết nối cơ sở dữ liệu, bạn đã đúng, bạn sẽ cần có thông tin kết nối cho cả hai cơ sở dữ liệu được xác định trong database.yml của bạn tập tin. Ví dụ:

# 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 sẽ không làm bất cứ điều gì với khối bổ sung này trừ khi bạn yêu cầu nó một cách rõ ràng. Thực tiễn phổ biến là xác định một mô hình ActiveRecord trừu tượng sẽ thiết lập kết nối thứ hai:

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

Sau đó, tạo mô hình mới cho các bảng nằm trong cơ sở dữ liệu báo cáo của bạn và kế thừa từ ReportingRecord thay vì 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

Để xây dựng một API, có rất nhiều cách khác nhau để thực hiện. Bất kể cách tiếp cận của bạn là gì, tôi thực sự khuyên bạn nên đảm bảo rằng nó chỉ có thể truy cập được qua HTTPS. Đây là bộ điều khiển cơ bản với một hành động phản hồi các yêu cầu 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

Ví dụ này sẽ yêu cầu bạn xác định mã thông báo truy cập trong config/secrets.yml của bạn tệp:

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)

Việc lựa chọn giữa một API và một giải pháp nhiều DB phụ thuộc chủ yếu vào cách ứng dụng của bạn có thể mở rộng trong tương lai. Phương pháp đa DB thường dễ thực hiện hơn và có hiệu suất cao hơn. API có xu hướng mở rộng quy mô theo chiều ngang tốt hơn và cơ sở dữ liệu có kết nối chỉ từ một ứng dụng thay vì 2 hoặc nhiều hơn có xu hướng dễ bảo trì hơn theo thời gian.

Hy vọng điều này sẽ hữu ích!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trình tự ngủ đông không được tạo

  2. Postgres thay đổi trình tự theo cách thủ công

  3. Cắt bỏ tất cả các bảng trong cơ sở dữ liệu Postgres

  4. Nhận ngày thứ hai của tuần này ở Postgres?

  5. Làm cách nào để thêm khóa chính tự động tăng dần vào bảng hiện có, trong PostgreSQL?