2009-06-04 22 views
13

我最近通過遷移將一些SQL函數添加到我的數據庫中,並且它們工作得很好。代碼作品,數據庫作品,測試不。 schema.rb文件告訴我它是最新版本(它是正確的),但它只包含表和索引的定義,而不包含我添加的函數。爲什麼rake db:在Rails中遷移不會將函數添加到模式文件中?

我在我的遷移中通過「execute()」方法添加了函數,並且需要它們在測試數據庫中以便RSpec測試通過(公司策略規定我不能提交此更改,直到此問題得到解決) 。

有誰知道這是爲什麼發生,或者如何解決它?我可以手動進入MySQL命令行並添加函數,但是下次有人執行db:test:prepare時,它們將被刪除。我需要一個可以自動化的解決方案。

感謝所有幫助和答覆,

-Mike Trpcic

回答

12

schema.rb是Ruby的模式格式,它不支持的功能或其他許多更先進的功能。將格式更改爲純SQL(在environment.rb中),您應該很好。

config.active_record.schema_format = :sql 

編輯:邁克的評論後,我做了一些挖的。 Rake任務將模式調用轉儲到MySQL和Oracle的ActiveRecord連接適配器中。 MySQL的不是很聰明,只會轉儲表結構,忽略其他所有內容。 PostgreSQL,SQLite,SQL Server和Firebird呼叫供應商提供的可執行文件。

mysqldumpdoesn't support dumping stored procedures版本5.0.13之前。

我環顧了Rails Lighthouse燈塔,但是尋找開放門票的難度遠遠超過它應該達到的水平。如果沒有其他人提出這個問題的話,你可能會考慮這樣做,儘管沒有補丁,但是任何人都不會去做這件事。

+1

史蒂夫,你已經找到了所有我不能的信息。謝謝,很高興終於有了答案。 – 2009-06-15 15:32:06

相關問題