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

时间:2012-03-20 05:29:16

标签: ruby-on-rails capistrano

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

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

仅使用标识为:primary => true的db角色的服务器来运行迁移。

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

我缺少什么?

2 个答案:

答案 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任务。在其他情况下,您可能只想在主服务器上运行任务(例如,迁移),并允许更改传播到从属实例。