问题是我希望从控制台获取我的Capistrano配方的参数,所以在浏览Google之后我想出了这个:
task :set_repo do
set :repository, "git@github.com:#{configuration[:repo]}/MyApp.git"
set :scm_user, configuration[:repo]
end
尝试运行任务时,我为配置哈希提出了“方法缺失”错误。在Google上进行了另一次搜索之后,我发现我必须从Capistrano加载配置,所以我添加了这段代码:
configuration = Capistrano::Configuration.respond_to?(:instance) ?
Capistrano::Configuration.instance(true) :
Capistrano.configuration(:must_exist)
但是这会抛出一个带有消息的强烈错误“请在Capistrano配方中要求此文件”。我已经尝试过要求使用capistrano /配置模块,但我仍然遇到同样的错误。
非常感谢任何帮助。
答案 0 :(得分:1)
好吧,我找到了一个不使用配置的工作。
您似乎可以在名称空间之外设置一些任务,例如
desc "Use UserA's git repository"
task :usera do
set :repository, "git@github.com:UserA/MyApp.git"
set :scm_user, "UserA"
end
desc "Use UserB's git repository"
task :userb do
set :repository, "git@github.com:UserB/MyApp.git"
set :scm_user, "UserB"
end
在执行此操作之后,您只需在控制台中调用部署任务,然后将存储库任务添加到您的控制台中。例如:
$ cap usera deploy
因此,这将首先调用您的 usera 任务,然后调用部署任务。
答案 1 :(得分:0)
您可以从命令行设置capistano变量。
例如,下面的调用会将capistrano变量 scm_user 设置为'userA',将capistrano变量存储库设置为“http://myrepo.com/blah” :
cap deploy -s scm_user="userA" -s repository="http://myrepo.com/blah"
这与放
的效果相同set :scm_user, 'userA'
set :repository, 'http://myrepo.com/blah'
位于deploy.rb文件的顶部。