2015-03-30 56 views
2

在我的Capistrano 3部署中,我想設置set :deploy_to, -> { "/srv/www/#{fetch(:application)}" },因此:deploy_to對於其部署的每個服務器都不相同。設置:從Capistrano3中的服務器配置deploy_to

在我staging.rb文件我有:

server 'dev.myserver.com', user: 'deploy', roles: %w{web app db}, install_path: 'mycustom/path' 
server 'dev.myserver2.com', user: 'deploy', roles: %w{web app db}, install_path: 'mycustom/other/path' 

我的問題是:將有可能使用「INSTALL_PATH」我確定,我:deploy_to?如果可能的話,你會怎麼做?

回答

2

最後,環顧四周後,我就到一個問題,從Capistrano的開發商之一,特別指出,它不能做

報價從Github issue

不可能,對不起。 fetch()(如廣泛記錄)讀取由set()設置的值 ,在常規 ruby​​變量上使用set()和fetch()的唯一原因是在插件和 擴展之間提供一致的API, ()可以稍後解決Proc。

通過服務器() 命令在主機對象中設置的變量屬於單個主機,其中一些主機,用戶,角色等具有特殊含義。欲瞭解更多信息,請參閱 https://github.com/capistrano/sshkit/blob/master/EXAMPLES.md#do-something-different-on-one-host-or-another-depending-on-a-host-property

如果你特別需要在每臺機器上部署不同的目錄,你可能不應該使用內置任務(它們的 不適合你的需求),而是從Gem中複製deploy.rake 放入您自己的項目中,並根據需要進行修改。在這種情況下, 可能不會執行提取(:deploy_to),而是從主機 屬性中讀取。

你可以嘗試在那裏做任何事情,在調用獲取依賴 之前做一些事情(:deploy_to),你()設置它使用從 host.someproperty的價值,但我敢肯定,將在激動人心的突破和 有趣的方式。