capistrano,:db角色,它的用途是什么?

据我所知,capistrano :db角色仅用于运行迁移。

(因此,在大多数情况下,它可能实际上不应该是运行数据库的服务器。为什么你会在那里有ruby / rails堆栈(或允许ssh登录)?它只是你想要实际执行rails迁移的服务器)。

并且仅使用标识为db role with :primary => true的服务器来运行迁移。

因此,任何其他标识为“db”角色但没有:primary => true …的服务器根本不使用任何内容? 那么为什么默认的deploy.rb是由capify .创建的capify . 鼓励你列出它们? 你甚至会在这里列出什么?

我错过了什么?

显然,角色的名称:db具有误导性。 正如您所指出的,Capistrano将它定义为(使用:primary => true )作为我们执行rake db:migrate on的主机,但数据库服务器并不总是在这些主机上运行。 我们可以通过Rails应用程序更改远程数据库服务器的模式。 这种主机的正确角色名称不是:db

从对lib / capistrano / configuration / roles.rb的注释中推断出角色的原始含义:db是运行数据库服务器的主机。 我们需要登录到:db hosts并执行一些任务。

Capistrano的设计者应该为deploy:migrate任务定义:migration角色或其他东西。 但是:db角色与此任务之间的关联是六年前用9a6d2fb定义的,并且从那以后一直没有改变。

一般来说,Capistrano的用户可以定义角色并自由地将它们与任务相关联。 deploy:migrate任务仅作为Rails开发人员的配方提供。 不幸的是,这个方法包含了对我们如何进行数据库迁移的误解,并且被广泛使用了很长时间。

您可能具有包含主数据库服务器和多个从属服务器的设置。 在某些情况下,您可能需要在所有数据库服务器上运行capistrano任务。 在其他情况下,您可能只想在主服务器上运行任务(例如,迁移),并允许更改传播到从属实例。