[RUBY-ON-RAILS] 내가 어떻게 활성 레코드 레일에 두 개의 서로 다른 데이터베이스와 함께 작동합니까?
RUBY-ON-RAILS내가 어떻게 활성 레코드 레일에 두 개의 서로 다른 데이터베이스와 함께 작동합니까?
나는 다른 레일 모델에서 다른 데이터베이스 연결을 사용해야합니다. 그렇게 할 수있는 그리 해키 방법이 있습니까?
모든 링크 또는 키워드를 검색 좋은 것입니다 :)
해결법
-
==============================
1.mikej는 권리입니다. 나는 그러나, 약간의 비트 청소기를 연결을 조사하기 위해 모델 코드를 만드는 보석을 쓰기 않았다.
mikej는 권리입니다. 나는 그러나, 약간의 비트 청소기를 연결을 조사하기 위해 모델 코드를 만드는 보석을 쓰기 않았다.
-
==============================
2.당신의 database.yml을 예를 들어, 새로운 섹션을 추가
당신의 database.yml을 예를 들어, 새로운 섹션을 추가
other_development: adapter: mysql database: otherdb_development username: root password: host: localhost other_production: adapter: mysql database: otherdb_production username: root password: host: localhost
lib 디렉토리 / other_database.rb에서 클래스 추가
class OtherDatabase < ActiveRecord::Base establish_connection "other_#{RAILS_ENV}" end
다음 OtherDatabase 예컨대에서 기본 데이터베이스 서브 클래스에없는 각 모델 :
class MyModel < OtherDatabase # my model code... end
-
==============================
3.나는 같은 응용 프로그램에서 2dB에 연결하려면 다음을 사용하고있다. 이로드에 나는 모든 때문에 lib 폴더에 넣어.
나는 같은 응용 프로그램에서 2dB에 연결하려면 다음을 사용하고있다. 이로드에 나는 모든 때문에 lib 폴더에 넣어.
require 'active_record' class OldDatabase < ActiveRecord::Base self.abstract_class = true establish_connection( :adapter => 'mysql', :database => 'weather', :host => 'localhost', :username => 'root', :password => 'password' ) end class NewDatabase < ActiveRecord::Base self.abstract_class = true establish_connection( :adapter => 'mysql', :database => 'redmine', :host => 'localhost', :username => 'root', :password => 'password' ) end class WeatherData < OldDatabase end class Board < NewDatabase end
희망이 도움이
-
==============================
4.레일 3.x를 업데이트 :
레일 3.x를 업데이트 :
class MyModel < ActiveRecord::Base establish_connection "other_#{Rails.env}" end
-
==============================
5.나는 예쁜 방법은 활성 모델은 외부 데이터베이스에 대한 기본 클래스를 생성하고 모델의 그 기지에서 다음 inherite되어있는 다른 데이터베이스에 연결하는 데 있다고 생각합니다. 레일 4.2.6과 5.0.4에이 방법을 작동 벌금
나는 예쁜 방법은 활성 모델은 외부 데이터베이스에 대한 기본 클래스를 생성하고 모델의 그 기지에서 다음 inherite되어있는 다른 데이터베이스에 연결하는 데 있다고 생각합니다. 레일 4.2.6과 5.0.4에이 방법을 작동 벌금
예를 들면 :
# in /models/external_db/base.rb require 'active_record' class ExternalDb::Base < ActiveRecord::Base self.abstract_class = true establish_connection "external_db_#{Rails.env}".to_sym end
그리고 당신의 모델 클래스 :
# in /models/external_db/some_model.rb class ExternalDB::SomeModel < ExternalDb::Base # your code end
하지만 당신은 /config/database.yml에서 외부 데이터베이스를 정의해야합니다
# in /config/database.yml external_db_development: adapter: sqlite3 pool: 5 timeout: 5000 database: db/external_db_development.db external_db_production: adapter: sqlite3 pool: 5 timeout: 5000 database: db/external_db_production.db
-
==============================
6.6 여러 데이터베이스에 대한 기본 지원을 추가 난간 : https://edgeguides.rubyonrails.org/active_record_multiple_databases.html
6 여러 데이터베이스에 대한 기본 지원을 추가 난간 : https://edgeguides.rubyonrails.org/active_record_multiple_databases.html
database.yml을
development: one: <<: *default other: <<: *default
기본 클래스를 모델 :
class OneModelBase < ActiveRecord::Base around_action :set_db private def set_db ActiveRecord::Base.connected_to(database: :one) do yield end end end class OtherModelBase < ActiveRecord::Base around_action :set_db private def set_db ActiveRecord::Base.connected_to(database: :other) do yield end end end
또한 DB마다 다른 마이그레이션 및 스키마를해야합니다. DB 레일과 같은 명령을 실행 : 모든 데이터베이스를 만듭니다 만듭니다. 범위를 지정할 수 있습니다 명령, 예를 들어, 레일 DB를 : 만듭니다 : 다른.
-
==============================
7.레일에서 4.1 establish_connection는 이제 기호를 취합니다
레일에서 4.1 establish_connection는 이제 기호를 취합니다
class OtherDbModel < ActiveRecord::Base establish_connection :"other_#{Rails.env}" end
from https://stackoverflow.com/questions/1226182/how-do-i-work-with-two-different-databases-in-rails-with-active-records by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] belongs_to와 has_one의 차이점은 무엇입니까? (0) | 2020.02.15 |
---|---|
[RUBY-ON-RAILS] 여러 외래 키와 관련 레일 (0) | 2020.02.15 |
[RUBY-ON-RAILS] 설치 MYSQL : 오류 : 빌드 보석 네이티브 확장에 실패 (0) | 2020.02.15 |
[RUBY-ON-RAILS] 어떻게 내 ActionMailer보기에 내보기 도우미를 사용 하는가? (0) | 2020.02.15 |
[RUBY-ON-RAILS] 레일, 자바 스크립트는 LINK_TO 도우미를 클릭 한 후로드되지 (0) | 2020.02.15 |