据我所知,capistrano :db
角色仅用于运行迁移。
(因此,在大多数情况下,它可能不应该实际上是运行数据库的服务器。为什么你会在那里有ruby / rails堆栈(或允许ssh登录)?它只是您希望实际执行rails迁移的任何服务器)。
仅使用标识为:primary => true
的db角色的服务器来运行迁移。
因此,任何其他标识为“db”角色但没有:primary => true
...的服务器根本不使用任何内容?那么为什么capify .
创建的默认deploy.rb会鼓励您列出它们?你甚至会在这里列出什么?
我缺少什么?
答案 0 :(得分:21)
显然,角色:db
的名称具有误导性。正如您所指出的,Capistrano将其定义为:primary => true
)作为我们执行rake db:migrate
的主机,但数据库服务器并不总是在这些主机上运行。我们可以通过Rails应用程序更改远程数据库服务器的模式。此类主机的正确角色名称不是:db
。
从lib/capistrano/configuration/roles.rb上的评论中推断,角色:db
的原始含义是运行数据库服务器的主机。我们需要登录:db
主机并完成一些任务。
Capistrano的设计师应该为:migration
任务定义deploy:migrate
角色或其他内容。但是:db
角色与此任务之间的关联是在六年前用9a6d2fb定义的,并且从那以后一直没有改变。
一般来说,Capistrano的用户可以定义角色并自由地将它们与任务相关联。 deploy:migrate
任务仅作为Rails开发人员的配方提供。不幸的是,这个方法包含了对我们如何进行数据库迁移的误解,并且已经被广泛使用了很长时间。
答案 1 :(得分:4)
您可能拥有包含主数据库服务器和多个从属服务器的设置。在某些情况下,您可能需要在所有数据库服务器上运行capistrano任务。在其他情况下,您可能只想在主服务器上运行任务(例如,迁移),并允许更改传播到从属实例。