문제

실제 응용 프로그램에 대한 Postgres 데이터베이스가 있지만 Oracle 데이터베이스에서 많은 데이터를 가져와야하는 Rails 프로젝트가 있습니다.

database.yml은 모양입니다

development:
  adapter: postgresql
  database: blah blah
  ...

oracle_db:
  adapter: oracle
  database: blah blah

Oracle DB의 데이터에서 내려 오는 내 모델은 다음과 같습니다.

class LegacyDataClass < ActiveRecord::Base

  establish_connection "oracle_db"

  set_primary_key :legacy_data_class_id

  has_one :other_legacy_class, :foreign key => :other_legacy_class_id_with_funny_column_name

 ...
end

이제 습관적으로 나는 종종 약간의 초기 개발 (그리고 이것이 초기 개발입니다)을 코딩 한 다음 Rails 콘솔에서 플레이함으로써 많은 초기 개발을 수행합니다. 예를 들어, LegacyDataclass의 모든 연관성을 정의한 후 a = LegacyDataClass.find(:first); puts a.some_association.name. 예기치 않게, 이것은 LegacyDataclass가 이미로드되지 않은 상태로 죽습니다.

그럼 내가 할 수있다 require 'LegacyDataClass' 필요할 때까지 문제를 해결합니다 reload!, 실제로 다시로드하지 않거나 콘솔의 새 인스턴스를 열 때까지.

따라서 질문 :

  • 이런 일이 발생합니까? 분명히 내가 이해하지 못하는 레일 마법이 있습니다.
  • 편리한 레일은 무엇입니까? 해결 방법?
도움이 되었습니까?

해결책

나는 이것이 당신의 연결보다는 당신의 모델 이름과 관련이 있다고 생각합니다. Rails 컨벤션은 모델 클래스 이름이 낙타 인 반면, 그들이 상주하는 파일은 소문자+밑줄입니다.

그러므로 "Legacymodel"클래스가 있어야합니다 models/legacy_model.rb. 당신의 진술 "require 'LegacyDataClass'" 이것이 사실이 아님을 나타내므로 Rails는 해당 모델을 자동으로로드하는 방법을 모릅니다.

다른 팁

런타임에 다른 데이터베이스에 대한 연결을 처리하는 앱을 위해 무언가를 썼습니다. 도움이 될 수 있습니다.

http://github.com/cherring/connection_ninja

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top