如何在Capistrano v3中的服务器上运行shell命令?


74

我是Capistrano的新手,我曾尝试使用Capistrano的DSL在服务器上运行shell命令(“运行”,“执行”等),但似乎已弃用。在搜索和搜索功能等效项之后,我仍然迷路。

当前代码:

desc 'Do something'
task :do_something
  execute 'echo sometext'
end

输出:

    cap aborted!
    undefined method `execute' for main:Object
    /Users/Justin/Dropbox/xxxx/xxxx/xxxx/Capfile:45:in `block (2 levels) in <top (required)>'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bundler/gems/capistrano-2dc1627838f9/lib/capistrano/application.rb:12:in `run'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bundler/gems/capistrano-2dc1627838f9/bin/cap:3:in `<top (required)>'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/cap:23:in `load'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/cap:23:in `<main>'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/ruby_noexec_wrapper:14:in `eval'
    /Users/Justin/.rvm/gems/ruby-2.0.0-p247/bin/ruby_noexec_wrapper:14:in `<main>'
    Tasks: TOP => deploy:do_something

我对方法“ info”和“ error”存在完全相同的问题-相同的问题,因为这些方法属于SSHKit,并且必须在SSHKit块中。
戴夫·伯特

Answers:


118

在Capistrano v3中,必须通过调用on主机名列表来指定运行代码的位置,例如

task :execute_on_server do
  on "root@example.com" do
    execute "some_command"
  end
end

如果您设置了角色,则可以使用该roles方法作为一种便利:

role :mailserver, "root@mail.example.com"

task :check_mail do
  on roles(:mailserver) do
    execute "some_command"
  end
end

这里有一些v3文档:http : //www.capistranorb.com/


8
太棒了,我希望他们在演练中将其变得更加清晰。他们只使用测试,信息等
Jgod

2
Capistranoexecute方法依赖于Java中的实现sshkit。现在,您可以在execute此处找到更多信息:github.com/leehambley/sshkit Capistrano 3文档仍然不完整。
Tombart

@KitHo是的,您可以使用sudo,就像使用手动ssh连接一样。
Benubird 2014年

3
当我对“信息”和“错误”方法有相同的问题时,我使用run_locally { ... }而不是on ... { ... }。这使您无需连接到远程设备即可进入SSHKit上下文。
戴夫·伯特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.