簡體   English   中英

Rails控制台不會自動為第二個DB加載模型

[英]Rails Console Doesn't Automatically Load Models For 2nd DB

我有一個Rails項目,它有一個Postgres數據庫用於實際應用程序,但需要從Oracle數據庫中提取大量數據。

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 a = LegacyDataClass.find(:first); puts a.some_association.name 出乎意料的是,這已經因為LegacyDataClass尚未加載而死亡。

然后我可以require 'LegacyDataClass'修復問題,直到我需要reload! ,它實際上不會重新加載它,或直到我打開一個新的控制台實例。

因此問題:

  • 為什么會這樣? 顯然有一些Rails魔法我不理解。
  • 什么是方便的Rails 解決方法

我相信這可能與您的型號名稱有關,而不是您的連接。 Rails約定是模型類名稱是CamelCase,而它們駐留的文件是小寫+下划線。

因此,“LegacyModel”類應該在models/legacy_model.rb 您關於"require 'LegacyDataClass'"陳述表明情況並非如此,因此Rails不知道如何自動加載該模型。

我在工作中為應用程序寫了一些東西,它在運行時處理與其他數據庫的連接,它可能會有所幫助。

http://github.com/cherring/connection_ninja

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM