2010-09-14 35 views
0

我見過http://github.com/muness/migration_sql_generator,但對於某些重要操作,它無法與MySQL正常工作。有沒有其他方法可以捕獲在軌移植過程中生成的sql?如何從Rails遷移(對於MySQL)獲得更改的SQL腳本?

我問的原因是我無法在生產服務器上運行遷移,因爲它是由我的公司從技術支持(並且從未接觸過開發人員)維護的。開發人員爲技術支持提供JRuby on Rails war文件,並通過Tomcat進行部署。但說服技術支持來安裝JRuby和Rails只是爲了在生產環境中運行遷移,絕非易事。我們希望保持部署非常簡單並儘可能減少依賴性。

我們只想給他們提供一個war文件和一個帶有db更改的sql腳本。

回答

0

我實際上最終創建了一個rake任務,它用猴子修補了Activerecord的sql執行方法,以便將所有sql輸出到日誌文件(log/database.log)。因此,任務可以在db:migrate之前運行,如下所示:rake db:log db:migrate。之後,您可以提取相關的語句,並將它們放入db/sql_migrations/<migration name>.sql文件中,並在數據庫管理員準備好後運行它們。

謝天謝地,我已經改變了工作,不必處理那個過程的混亂了。 :)

+0

我和你一樣。你有沒有開源這個解決方案? – weibel 2012-05-21 07:46:29

+0

我沒有。而且我沒有和我一起編碼的電腦外殼。但是,通過一些研究,您可以輕鬆做到這一點。 我不太記得,但我可能已經看到了另一個SO問題的答案:http://stackoverflow.com/a/1629474/241367。 我也許看過他提供的鏈接:http://www.misuse.org/science/2006/12/12/sql-logging-in-rails/。 我沒有實現misuse.org文章的代碼片段中的所有內容。 YMMV,希望這有助於。 – thekingoftruth 2012-06-15 22:36:44

1

您可能可以使用某種工具來生成兩個數據庫的差異。有一個關於here的問題。

如果您在運行遷移之後將您的測試數據庫與您的開發數據庫進行比較,那可能是最簡單的方法。它甚至值得添加一個rake任務來完成它;讓該rake任務依賴於遷移,然後您可以使用新任務而不是rake db:migrate在您每次遷移時生成diff。

+1

由於您希望在此表中進行遷移,因此應在每個表的表結構上完成差異,併爲schema_migrations執行數據。 – hellvinz 2010-09-14 21:42:49