2012-03-20 30 views
12

據我所知,capistrano :db角色僅用於運行遷移。 (因此,在大多數情況下,它可能是應該不是實際上是運行數據庫的服務器。爲什麼你會有一個ruby/rails堆棧(或者允許ssh登錄)?它只是你想要的任何服務器實際執行軌道遷移)。capistrano,:db角色,它是幹什麼用的?

只有與:primary => true標識爲db角色的服務器才用於運行遷移。

因此,任何其他標識爲「數據庫」角色但沒有:primary => true的服務器都沒有任何用處?那麼爲什麼capify .創建的默認deploy.rb鼓勵你列出它們?你甚至會在這裏列出什麼?

我錯過了什麼?

回答

21

明顯地,角色:db的名稱是誤導性的。正如您指出的那樣,Capistrano將其定義爲(我們的:primary => true)作爲我們執行rake db:migrate的主機,但數據庫服務器並不總是在這些主機上運行。我們可以通過Rails應用程序來改變遠程數據庫服務器的模式。這種主機的正確角色名稱不是:db

根據關於lib/capistrano/configuration/roles.rb的評論推斷,角色:db的原始含義是運行數據庫服務器的主機。我們預計登錄到:db主機並執行一些任務。

Capistrano的設計師應該已經爲deploy:migrate任務定義了:migration角色或其他內容。但:db角色與此任務之間的關聯是在六年前與9a6d2fb一起定義的,並且從那以後一直未更改。

一般來說,Capistrano的用戶可以自由定義角色並將其與任務相關聯。提供的deploy:migrate任務就像是針對Rails開發人員的配方一樣。不幸的是,這個配方包含了一個關於我們如何進行數據庫遷移的誤解,並且被廣泛使用了很長時間。

+2

您現在可以更改遷移的角色名稱(建議也是這樣):https://github.com/capistrano/rails#recommendations – NobodysNightmare 2016-12-05 08:16:20

4

您可能有一個包含主數據庫服務器和多個從服務器的設置。在某些情況下,您可能需要在所有數據庫服務器上運行capistrano任務。在其他情況下,您可能只想在主服務器上運行任務(例如遷移),並允許將更改傳播到從屬實例。

+0

你能給出任何可以在所有數據庫服務器上運行的任務的例子嗎?在這種情況下,這是否意味着數據庫本身運行的實際主機? – jrochkind 2012-03-20 12:18:43

+0

是的。一臺服務器可以實現多種角色,但不一定。在很多情況下,您可以用一個主站和多個從站來擴展數據庫。您可能只想在主(主)服務器上運行數據遷移,但是如果您爲所有數據庫實例啓用了日誌記錄,則可能需要全部命中並歸檔日誌文件。 – 2012-03-20 16:19:40