无法加载Capistrano配方的配置

时间:2012-06-25 14:57:29

标签: ruby-on-rails capistrano

问题是我希望从控制台获取我的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 /配置模块,但我仍然遇到同样的错误。

非常感谢任何帮助。

2 个答案:

答案 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文件的顶部。