2010-01-28 58 views
1

我在Ruby on Rails應用程序中使用了兩個數據庫;一個是應用程序的數據庫,而另一個是獨立的數據庫,Rails不受控制。Ruby on Rails和db:fixtures:load - 它可以忽略某些模型嗎?

問題是,當將裝置加載到開發環境時,它試圖從與開發數據庫的連接到獨立數據庫的表上運行DELETE語句,這顯然錯誤了。

我不希望Rails試圖做任何事情,但讀獨立數據庫 - 我特別不希望它試圖刪除表。

有沒有一種簡單的方法來告訴Rails在加載燈具時忽略第二個數據庫的模型?

UPDATE:澄清,Rails的似乎認爲從獨立數據庫中的表是發展連接的一部分,雖然我已經指定使用establish_connection模型類的正確連接。另外需要注意的是,所有的模型類都可以根據需要按照要求從script/console進行精確的操作。

回答

0

好了...我的問題是,我用script/generate創建從二級數據庫,這也創造了夾具模型,模式,測試和遷移文件。我已經刪除了模式,測試和遷移文件,但沒有而不是刪除生成的燈具(他們是空文件),因爲我不認爲它已經創建了任何。

從二級數據庫,並刪除所有文件(包括型號)後重新運行dev的分貝的遷移,我加回模型文件和數據庫中databases.yml從二級分貝,這解決了這個問題。

我仍然無法解釋爲什麼Rails的rake任務在錯誤的數據庫中查找,我對rails在輔助數據庫中添加schema_migrations表顯得有些失望,這顯然不需要。

但是,它現在有效。

2
rake db:fixtures:load RAILS_ENV=testing 

會做配置爲testing對數據庫中的作業在database.yml

+0

我與環保試了一下發布前使用導出設置變量;根據你的建議,我也嘗試過這種方式。同樣的錯誤。 – 2010-01-28 20:29:26

+0

您可以編寫自己的工具來將* .yml中的數據加載到所需的數據庫,這就是我所能提供的信息。 GL – 2010-01-28 20:45:12

+0

'rake db:fixtures:load RAILS_ENV = test'(not testing)for me working for me。 – 2011-09-27 17:16:15

1

刪除test/fixtures目錄中的model_name.yml文件,Rails不會嘗試刪除這些表。

更好的是,完全刪除所有的*.yml文件和stopusingfixtures

+1

這就是我最終從我下面的答案中發現的;但是,它仍然不應該試圖從錯誤的表中刪除它們。我是一個PHP/Python傢伙,我習慣於模擬測試,而不那麼挑剔。遷移很好,但其餘的只是頭痛。我會檢查你提供的鏈接。謝謝。 – 2010-01-30 19:34:35

1

我想你可能還可以通過添加獨立的數據庫ActiveRecord的所有表在environment.rb中做到這一點:: SchemaDumper.ignore_tables,就像這樣:

ActiveRecord::SchemaDumper.ignore_tables = ['independent_db_table1', 'independent_db_table2']