2

问题是我想从控制台获取我的 Capistrano 配方的参数,所以在查看谷歌后我想出了这个:

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)

但这会引发 LoadError 并显示消息“请从 Capistrano 配方中要求此文件”。我试过要求 capistrano/configuration 模块,但我一直收到同样的错误。

任何帮助是极大的赞赏。

4

2 回答 2

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任务,然后调用您的deploy任务。

于 2012-06-26T13:52:50.813 回答
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 文件的顶部。

于 2012-07-18T02:37:24.060 回答