3

我有3個支持我的Rails 3.2應用程序的大型只讀數據庫,它們中的值被檢查,其中一些數據與輔助信息一起存儲在我的主數據庫中。我將這些設置爲我的開發和生產Postgres數據庫中的架構。如何在我的RSpec測試中包含大型支持數據庫?

這是錯誤的方法?由於它們只是只讀的,有沒有更好的方法讓它們生活在自己的Postgres數據庫中,並從那裏引用它們?我不認爲PG寶石是這樣工作的。

如果他們需要在每一個環境下,我怎麼能保證他們是我的測試環境的一部分?

我不能只是這些環境複製到test,他們將獲得疲憊不堪的我每次運行:

rake db:test:prepare 
+0

也許這些答案可以幫助您:http://stackoverflow.com/questions/5916126/how-do-i-prepare-test-databases-for-rails-rspec-tests-without-running-rake-spe – Mattherick 2013-05-05 22:19:12

+0

謝謝Mattherick,但這種情況有點不同。這些人似乎在爲他們的測試環境做自定義的事情,而我試圖避免爲這些只讀數據庫做自定義事情。 – AKWF 2013-05-06 02:12:33

回答

1

如果我的理解沒錯:

  • 你有3個與大型數據庫支持的數據是必不可少的運行你的應用程序
  • 由於它們很大,你不想將它們存儲爲XML/JSON /序列化文件,而且你更喜歡有t下襬的數據庫,便於查詢
  • 您希望能夠訪問相同的3個數據庫中所有您的環境和服務器

所以,你這裏有什麼基本的東西是看齊源代碼配置,它應該理想地成爲您的代碼庫的一部分。即它的一個fixture,儘管是數據庫夾具而不是YAML或JSON夾具。

理想的解決方案是,您應該將該數據庫轉儲轉換爲夾具。這裏是如何:

  • 乘坐PostgreSQL backup of the data,並將其保存爲test/fixtures/your_model_name.dmp
  • 創建一個新的ERB夾具test/fixtures/your_model_name.erb。 ERB燈具可以有Ruby代碼
  • 在ERB夾具添加以下代碼:

    <% 
        cfg = YourModel.connection_config 
        FileUtils.sh "psql " + 
           "-u #{cfg['username']} " + 
           "-p #{cfg['password']} " + 
           "-h #{cfg['host'] || 'localhost'} " + 
           " < #{Rails.root + '/test/fixtures/yourmodel.dmp'}" 
    %> 
    

既然是ERB文件,它會自動運行它裏面的代碼,並且將數據導入到PostgreSQL的。唯一的問題是你需要在路徑上使用psql。如果您的應用程序服務器和數據庫位於不同的位置,那麼您需要ssh進入服務器,然後運行導入。

另一種選擇是直接將這些數據庫保存爲SQLite文件,然後單獨爲這3個模型use a separate connection。這更加廣泛,除非在主應用程序表和這3個表之間沒有任何直接外鍵引用和RESTRICT/CASCADE定義。但是我想你的主數據庫和這三個數據庫之間並沒有直接的關係,因爲跨數據庫引用在大多數情況下都是很痛苦的。

相關問題