복붙노트

[RUBY-ON-RAILS] 레일에서 여러 데이터베이스

RUBY-ON-RAILS

레일에서 여러 데이터베이스

이것은 할 수 있습니까? 하나의 응용 프로그램에서, 그 SQLite는 많은 프로젝트를 관리합니다. 내가 원하는 그들에 다른 데이터와 함께하지만, 내 애플 리케이션이 동일하게 구조화 된 데이터베이스의 .. 그래서 여러 복사본을 관리하고 각 프로젝트에 대해 서로 다른 데이터베이스를하는 것입니다. 나는 URI에 PARAMS에 기반을 사용하는 복사의 선택이 될 것입니다.

이 .. 내가 프로그래밍의 이런 종류의으로 newbe 해요 1. 보안을 수행하고, 나는 어떤 이유로 또 다른 하나가 손상되면 프로젝트에서 작업하는 동안 일이 발생할 싶지 않아 .. 2. 쉽게 백업을 그리고 보관 오래된 프로젝트

해결법

  1. ==============================

    1.기본적으로 레일은 대부분의 경우에, 그것은 전혀 이해가되지 않습니다, 다중 데이터베이스 아키텍처 설계되지 않습니다. 하지만 그래, 당신은 다른 데이터베이스와의 연결을 사용할 수 있습니다.

    기본적으로 레일은 대부분의 경우에, 그것은 전혀 이해가되지 않습니다, 다중 데이터베이스 아키텍처 설계되지 않습니다. 하지만 그래, 당신은 다른 데이터베이스와의 연결을 사용할 수 있습니다.

    다음은 몇 가지 참조는 다음과 같습니다

  2. ==============================

    2.당신은 제어하고 각 레일 인스턴스를 구성 할 수 있습니다, 당신은 자신을 저장, 그들 때문에이 대기되는 자원을 낭비하는 몇 가지 문제를 감당할 그냥 모든 인스턴스에 사용되는 데이터베이스 연결을 수정하는 database.yml을 변경 할 수 있습니다. 당신이 성능에 대해 우려하는 경우이 방법은 그것을 잘라하지 않습니다.

    당신은 제어하고 각 레일 인스턴스를 구성 할 수 있습니다, 당신은 자신을 저장, 그들 때문에이 대기되는 자원을 낭비하는 몇 가지 문제를 감당할 그냥 모든 인스턴스에 사용되는 데이터베이스 연결을 수정하는 database.yml을 변경 할 수 있습니다. 당신이 성능에 대해 우려하는 경우이 방법은 그것을 잘라하지 않습니다.

    하나의 데이터베이스에 하나의 고유 한 테이블에 바인딩 모델의 경우 모델 내부 establish_connection를 호출 할 수 있습니다 :

    establish_connection "database_name_#{RAILS_ENV}"
    

    로 여기에 설명 : http://apidock.com/rails/ActiveRecord/Base/establish_connection/class

    당신은 하나의 데이터베이스에서 테이블 및 다른 데이터베이스에서 테이블을 사용하여 다른 서로 다른 모델을 사용하여 일부 모델이있을 것이다.

    당신이 다른 데이터베이스에 공통의 단일 모델에 의해 공유 동일한 테이블이있는 경우, 액티브은 도움이되지 않습니다. 뒤로 2009 년에 나는 레일 2.3.8를 사용하여 작업 한 프로젝트에이 필요합니다. 나는 각 고객에 대한 데이터베이스를했고, 나는 그들의 ID를 가진 데이터베이스를 지명했다. 그래서와 ApplicationController 내부 연결을 변경하는 방법을 만들어 :

    def change_database database_id = params[:company_id]
        return if database_id.blank?
    
        configuration = ActiveRecord::Base.connection.instance_eval { @config }.clone
        configuration[:database] = "database_name_#{database_id}_#{RAILS_ENV}"
    
        MultipleDatabaseModel.establish_connection configuration
    end
    

    그리고 모든 컨트롤러에 before_filter으로 그 방법을 추가 :

    before_filter :change_database
    

    그래서 각 PARAMS 각 제어기의 동작에 대한 [: COMPANY_ID]가 정의되고 세트는 올바른 데이터베이스를 변경한다.

    핸들 마이그레이션에 나는 모든 고객을위한 외모와 각각의 ID와 블록을 반복 처리하는 방법, 액티브 :: 마이그레이션을 확장 :

    class ActiveRecord::Migration
        def self.using_databases *args
            configuration = ActiveRecord::Base.connection.instance_eval { @config }
            former_database = configuration[:database]
    
            companies = args.blank? ? Company.all : Company.find(args)
    
            companies.each do |company|
                configuration[:database] = "database_name_#{company[:id]}_#{RAILS_ENV}"
                ActiveRecord::Base.establish_connection configuration
    
                yield self
            end
    
            configuration[:database] = former_database
            ActiveRecord::Base.establish_connection configuration
        end
    end
    

    당신이 두 개의 서로 다른 데이터베이스에서 동일한 작업 내에서 쿼리를 만들기 위해이 작업을 수행하여, 그것은 불가능하다합니다. 다시 change_database를 호출 할 수 있지만 더 이상 올바른 데이터베이스에 링크 된 개체에서 쿼리를 실행하는 방법을 사용하려고하면 그것은 불쾌한 얻을 것이다. 또한, 당신이 다른 데이터베이스에 속하는 테이블을 조인 할 수 없습니다 분명하다.

    제대로이 문제를 처리하기 위해, 액티브 상당히 확장되어야한다. 이 문제를 해결하는 데 지금까지 플러그인이 있어야합니다. 빠른 연구는 나에게이 일을했다 :

    DB-차머 : http://kovyrin.github.com/db-charmer/

    나는 그것을 시도 할 의사입니다. 내가 당신을 위해 일하는 알려주십시오.

  3. ==============================

    3.나는 다른 데이터베이스를 사용하여 내 모델의 상단에이를 추가하여이 과거 있어요

    나는 다른 데이터베이스를 사용하여 내 모델의 상단에이를 추가하여이 과거 있어요

    class Customer < ActiveRecord::Base
      ENV["RAILS_ENV"] == "development" ? host = 'devhost' : host = 'prodhost'
    
      self.establish_connection(
          :adapter  => "mysql",
          :host     => "localhost",
          :username => "myuser",
          :password => "mypass",
          :database => "somedatabase"
        )
    
  4. ==============================

    4.또한 DB 차머 불리는이 프로젝트를 체크 아웃해야합니다 : http://kovyrin.net/2009/11/03/db-charmer-activerecord-connection-magic-plugin/

    또한 DB 차머 불리는이 프로젝트를 체크 아웃해야합니다 : http://kovyrin.net/2009/11/03/db-charmer-activerecord-connection-magic-plugin/

  5. ==============================

    5.그것의 가치는 가까운 사용자 정의 데이터베이스 연결을 기억할 필요가 모든 솔루션에 주목. 당신은 연결이 부족하고 이상한 요청 시간 초과 문제를 다르게 볼 수 있습니다.

    그것의 가치는 가까운 사용자 정의 데이터베이스 연결을 기억할 필요가 모든 솔루션에 주목. 당신은 연결이 부족하고 이상한 요청 시간 초과 문제를 다르게 볼 수 있습니다.

    쉬운 솔루션은 clear_active_connections이다! 컨트롤러에 after_filter있다.

    after_filter :close_custom_db_connection
    
    def close_custom_db_connection
      MyModelWithACustomDBConnection.clear_active_connections!
    end
    
  6. ==============================

    6.사용자의 설정에 / 같은 것을 할 database.yml을

    사용자의 설정에 / 같은 것을 할 database.yml을

    default: &default
      adapter: postgresql
      encoding: unicode
      pool: 5
    
    development:
      <<: *default
      database: mysite_development
    
    test:
      <<: *default
      database: mysite_test
    
    production:
      <<: *default
      host: 10.0.1.55
      database: mysite_production
      username: postgres_user
      password: <%= ENV['DATABASE_PASSWORD'] %>
    
    db2_development:
      <<: *default
      database: db2_development
    
    db2_test:
      <<: *default
      database: db2_test
    
    db2_production:
      <<: *default
      host: 10.0.1.55
      database: db2_production
      username: postgres_user
      password: <%= ENV['DATABASE_PASSWORD'] %>
    

    다음 모델에서 당신과 함께 DB2 참조 할 수 있습니다

    class Customers < ActiveRecord::Base
      establish_connection "db2_#{Rails.env}".to_sym
    end
    
  7. ==============================

    7.당신이 질문에 설명한 것은 다중 테넌트 (각각 서로 다른 데이터와 동일하게 구조화 된 데이터베이스)입니다. 아파트 보석이 좋은 곳입니다.

    당신이 질문에 설명한 것은 다중 테넌트 (각각 서로 다른 데이터와 동일하게 구조화 된 데이터베이스)입니다. 아파트 보석이 좋은 곳입니다.

    레일에서 여러 데이터베이스의 일반적인 질문에 대해 : 액티브는 여러 데이터베이스를 지원하지만 레일은이를 관리 할 수있는 방법을 제공하지 않습니다. 나는 최근에이 문제를 해결하기 위해 멀티 버스 보석을 만들었습니다.

  8. ==============================

    8.내가 지금까지 발견 한 가장 좋은 방법은 이것이다 :

    내가 지금까지 발견 한 가장 좋은 방법은 이것이다 :

    우리가 접근 할 수있는 3 데이터베이스 아키텍처가 있습니다.

    참고 : 특정 장점과 단점을 가지고는 사용 사례에 따라 달라집니다.

    나는이 블로그에서이있어! 나에게 매우 도움이 스탠드.

    당신은 레일의 보석 아파트를 사용할 수 있습니다

    비디오 참조하면 아파트를 Gorails에 따라 할 수있다

  9. from https://stackoverflow.com/questions/1825844/multiple-databases-in-rails by cc-by-sa and MIT license