2011-08-25 79 views
2

我正在尝试与Capistrano部署我的RoR应用程序。一切都很好,直到我在我的Capistrano配置中引入了另一个角色:Web角色,它应该是我的HTTP /反向代理服务器。我如何分离Capistrano中的角色?

我的理解是:应用程序角色应该是指应用程序服务器(thin,mongrel,无论)和web角色应该指的是前端服务器(nginx,apache),所以我很困惑即使Capistrano在默认情况下将其分开,也可以选择在所有角色上运行所有任务。

现在我的问题是我无法使部署:update_code仅在具有:app角色的服务器上运行,例如,因为capistrano错误,因为它会尝试在我的Web服务器上运行update_code ,我甚至没有安装git(我不需要它...)。有人在做这件事吗?有人可以分享代码吗?

TIA,ngw

+0

我很困惑......关于:web角色的文档说:“这被认为是你的web服务器(阅读:Apache/nginx /等)”,关于应用角色说:“这些被假定为成为您的应用程序服务器,在Ruby环境中,这意味着像Mongrel或Mongrel Cluster;它也可以是您的Passenger服务器。“为什么默认运行update_code,symlink,基本上所有的部署方式都完全相同:web和:app?我试图覆盖所有的默认任务只运行在:应用程序,但它是一个PITA :)我做错了什么? – ngw

回答

0

您是否明确指定了任务名称中的角色?

task :task_A, :roles => :web do 
    #do stuff here 
end 

task :task_B, :roles => :app do 
    #do stuff here 
end 
1

这个问题是因为内置的任务不尊重上调用它们自定义任务,即角色限制,

task my_task, :roles => :web do 
    run "some command" # will only be executed on servers with the :web role 
    update    # will be executed for all roles 
end 

你会的,你直觉,必须覆盖所有内置任务。或者你可以尝试Rodney Koch的patch到Capistrano。

相关问题