如何调用Capistrano酒店的另一个Capistrano酒店的任务中的任务吗?(How to c

2019-10-19 07:06发布

我试图创建复制和database.yml文件链接到应用中一项基础性工作,但我想不通为什么它不是工作。

我使用Capistrnao 3.1

这是我的lib / Capistrano酒店/任务/ databases.cap文件:

namespace :db_access do

  # Idea : https://github.com/capistrano/sshkit/blob/master/EXAMPLES.md
  desc 'Copy production database.yml from local workstation'
  task :copy_production do
    on roles :all do
      execute :mkdir, '-p', "#{shared_path}/config"
      upload! 'config/deploy/production.database.yml', "#{shared_path}/config/database.yml"
    end
  end


  # Idea : http://stackoverflow.com/questions/9684649/capistrano-cant-deploy-my-database-yml
  desc 'Create database.yml symlinks to current release'
  task :create_symlinks do
    on roles :all do
      unless test "[ -f #{shared_path}/config/database.yml ]"
        invoke 'db_access:copy_production'
      end
      execute :ln, "-nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
    end
  end
end

这是我得到的输出中:

douglas@bilbo:/var/www/odpf$ cap production db_access:create_symlinks
DEBUG [3f670dfd] Running /usr/bin/env [ -f /var/www/odpf/shared/config/database.yml ] on myserver.net
DEBUG [3f670dfd] Command: [ -f /var/www/odpf/shared/config/database.yml ]
DEBUG [3f670dfd] Finished in 0.589 seconds with exit status 1 (failed).
cap aborted!
**undefined method `verbosity' for "/usr/bin/env db_access:copy_production\n":String**
/home/douglas/.rvm/gems/ruby-2.1.0@rails3/gems/sshkit-1.3.0/lib/sshkit/formatters/pretty.rb:10:in `write'
/home/douglas/.rvm/gems/ruby-2.1.0@rails3/gems/sshkit-1.3.0/lib/sshkit/backends/printer.rb:14:in `block in execute'
/home/douglas/.rvm/gems/ruby-2.1.0@rails3/gems/sshkit-1.3.0/lib/sshkit/backends/printer.rb:13:in `tap'
/home/douglas/.rvm/gems/ruby-2.1.0@rails3/gems/sshkit-1.3.0/lib/sshkit/backends/printer.rb:13:in `execute'
/var/www/odpf/lib/capistrano/tasks/databases.cap:20:in `block (3 levels) in <top (required)>'
/home/douglas/.rvm/gems/ruby-2.1.0@rails3/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:54:in `instance_exec'
/home/douglas/.rvm/gems/ruby-2.1.0@rails3/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:54:in `run'
/home/douglas/.rvm/gems/ruby-2.1.0@rails3/gems/sshkit-1.3.0/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
Tasks: TOP => db_access:create_symlinks

我不知道如何来调用其他任务。 我inspirate myslef从https://github.com/capistrano/capistrano/blob/master/lib/capistrano/tasks/deploy.rake

如果我尝试没有“调用”关键字,不“”的招牌:

namespace :db_access do
  # Idea : https://github.com/capistrano/sshkit/blob/master/EXAMPLES.md
  desc 'Copy production database.yml from local workstation'
  task :copy_production do
    on roles :all do
      execute :mkdir, '-p', "#{shared_path}/config"
      upload! 'config/deploy/production.database.yml', "#{shared_path}/config/database.yml"
    end
  end

  # Idea : http://stackoverflow.com/questions/9684649/capistrano-cant-deploy-my-database-yml
  desc 'Create database.yml symlinks to current release'
  task :create_symlinks do
    on roles :all do
      unless test "[ -f #{shared_path}/config/database.yml ]"
        db_access.copy_production
      end
      execute :ln, "-nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
    end
  end
end

结果如下:

douglas@bilbo:/var/www/odpf$ cap production db_access:create_symlinks --trace
** Invoke production (first_time)
** Execute production
** Invoke load:defaults (first_time)
** Execute load:defaults
** Invoke db_access:create_symlinks (first_time)
** Execute db_access:create_symlinks
cap aborted!
undefined local variable or method `db_access' for #<SSHKit::Backend::Netssh:0x00000002862340>
/var/www/odpf/lib/capistrano/tasks/databases.cap:20:in `block (3 levels) in <top (required)>'
/home/douglas/.rvm/gems/ruby-2.1.0@rails3/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:54:in `instance_exec'
/home/douglas/.rvm/gems/ruby-2.1.0@rails3/gems/sshkit-1.3.0/lib/sshkit/backends/netssh.rb:54:in `run'
/home/douglas/.rvm/gems/ruby-2.1.0@rails3/gems/sshkit-1.3.0/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute'
Tasks: TOP => db_access:create_symlinks

这必须是一个简单的syntaxe错误,但因为我无法找到解释,我不知道该怎么办的指导。

感谢您的帮助

Answer 1:

我的命令来调用“db_access:copy_production”是正确的。

这个问题来自于SSH-KIT具有错误 。 问题是,Capistrano的3.1使用ssh-套件1.3版。 因此,我们必须使用Capistrano的3.0.1直到SSH-KIT得到固定。

解决方法:

gem uninstall capistrano
gem uninstall capistrano-rails
gem uninstall sshkit
rm Gemfile.lock

修改的Gemfile:

  gem 'capistrano', '~> 3.0.1'
  gem 'sshkit', '~> 1.0.0'

安装宝石:

bundle install


文章来源: How to call a Capistrano's task within another Capistrano's task?