2012-06-25 54 views
2

的事情是,我想參數從控制檯我Capistrano的配方,所以找上谷歌後,我想出了這一點:無法加載配置Capistrano的Receipe

task :set_repo do 
    set :repository, "[email protected]:#{configuration[:repo]}/MyApp.git" 
    set :scm_user, configuration[:repo] 
end 

當試圖運行任務,我想出了一個「方法丟失」錯誤的配置哈希。而之後在谷歌其他搜索,我發現,我必須加載從Capistrano的配置,所以我加了這段代碼:

configuration = Capistrano::Configuration.respond_to?(:instance) ? 
    Capistrano::Configuration.instance(true) : 
    Capistrano.configuration(:must_exist) 

但這扔LoadError與消息「請從Capistrano的配方中需要此文件「。我試過要求capistrano /配置模塊,但我一直得到相同的錯誤。

任何幫助,非常感謝。

回答

1

嗯,我找到了一個解決方法,根本不使用配置。

看來你可設置一些任務的名稱空間外像這樣

desc "Use UserA's git repository" 
task :usera do 
    set :repository, "[email protected]:UserA/MyApp.git" 
    set :scm_user, "UserA" 
end 

desc "Use UserB's git repository" 
task :userb do 
    set :repository, "[email protected]:UserB/MyApp.git" 
    set :scm_user, "UserB" 
end 

,做這個之後,你可以簡單地叫你的部署任務在控制檯前面加上你的資料庫的任務。例如:

$ cap usera deploy 

所以這會先打電話給你用戶A任務,然後你部署任務。

0

您可以從命令行設置capistano變量。

例如,下面將調用的Capistrano的可變scm_user設置爲 '用戶A' 和Capistrano的可變爲 「http://myrepo.com/blah」:

cap deploy -s scm_user="userA" -s repository="http://myrepo.com/blah" 

這具有與在您的deploy.rb文件頂部放置

set :scm_user, 'userA' 
set :repository, 'http://myrepo.com/blah' 

相同的效果。

相關問題