복붙노트

[RUBY-ON-RAILS] 레일에 루비에 여러 데이터베이스에 연결

RUBY-ON-RAILS

레일에 루비에 여러 데이터베이스에 연결

나는 레일 응용 프로그램 작업을 미세에 루비를 가지고 데이터베이스에 연결. 지금은 같은 응용 프로그램에서 다른 데이터베이스에 연결합니다. 데이터 모델은 동일 할 수있다. 사실 나는 응용 프로그램이 잘 작동 다른 데이터베이스에 연결합니다. 그러나 나는 두 개의 서로 다른 데이터베이스에 연결합니다. 그것은 루비 온 레일즈 수 있습니까?

해결법

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

    1.여러 데이터베이스 연결의 경우 database.yml을 파일에 다음 코드를 추가해야합니다. 여기에, 나는 레일 응용 프로그램에서 두 개의 데이터베이스를 연결하는 예를 제공하고있다

    여러 데이터베이스 연결의 경우 database.yml을 파일에 다음 코드를 추가해야합니다. 여기에, 나는 레일 응용 프로그램에서 두 개의 데이터베이스를 연결하는 예를 제공하고있다

    설정 / database.yml을

    development:
      adapter: mysql2
      database: db1_dev
      username: root
      password: xyz
      host: localhost
    
    development_sec:
      adapter: mysql2
      database: db2_dev
      username: root
      password: xyz
      host: localhost
    
    production:
      adapter: mysql2
      database: db1_prod
      username: root
      password: xyz
      host: your-production-ip
    
    production_sec:
      adapter: mysql2
      database: db2_prod
      username: root
      password: xyz
      host: your-production-ip
    

    여기에는 개발 및 생산 환경에 대한 두 개의 데이터베이스를 사용하고 있습니다.

    이제 우리는 데이터베이스에 모델을 연결해야합니다. 당신은 개발 및 생산 모드에서 응용 프로그램을 실행하는 경우, 모든 모델은 사람들이 당신의 database.yml 파일에 언급 된 개발 및 생산 DB 매개 변수를 통해 매핑됩니다. 일부 모델에 대한 그래서 우리는 다른 데이터베이스에 연결해야합니다.

    그 가정하자, 우리는 두 가지 모델 사용자 및 종류가 있습니다. 사용자 테이블은 db1_dev 및 db1_prod, db2_dev 및 db2_prod의 범주 테이블에 있습니다.

    카테고리 모델

    class Category < ActiveRecord::Base
      establish_connection "#{Rails.env}_sec"
    end
    

    두 번째 데이터베이스에 대한 새로운 마이그레이션을 추가 할 때 마찬가지로, 그것에 다음 코드를 추가해야합니다.

    class CreateRewards < ActiveRecord::Migration
      def connection
        ActiveRecord::Base.establish_connection("#{Rails.env}_sec").connection
      end
    
      def change
        # your code goes here.
      end
    end
    

    당신을 위해 작동합니다 희망 :).

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

    2.다른 데이터베이스로 전환하려면 사용 establish_connection :

    다른 데이터베이스로 전환하려면 사용 establish_connection :

    ActiveRecord::Base.establish_connection(
      :adapter  => "mysql",
      :host     => "localhost",
      :username => "myuser",
      :password => "mypass",
      :database => "somedatabase"
    )
    

    또한과 같이 database.yml을에서 사전 구성된 환경을 전달할 수 있습니다 :

    ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['other_env'])
    

    또한 특정 모델에 설정할 수 있습니다 :

    MyClass.establish_connection(...)
    
  3. from https://stackoverflow.com/questions/17311199/connecting-to-multiple-databases-in-ruby-on-rails by cc-by-sa and MIT license