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

Jgo*_*god 73 ruby capistrano3

我是Capistrano的新手,我尝试使用Capistrano的DSL在服务器上运行shell命令('run','execute'等),但它似乎已被弃用.在搜索并搜索功能等同物之后,我仍然迷失了.

当前代码:

desc 'Do something'
task :do_something
  execute 'echo sometext'
end
Run Code Online (Sandbox Code Playgroud)

输出:

    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
Run Code Online (Sandbox Code Playgroud)

lma*_*ars 115

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

task :execute_on_server do
  on "root@example.com" do
    execute "some_command"
  end
end
Run Code Online (Sandbox Code Playgroud)

如果您设置了角色,则可以使用该roles方法:

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

task :check_mail do
  on roles(:mailserver) do
    execute "some_command"
  end
end
Run Code Online (Sandbox Code Playgroud)

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

  • 太棒了,我希望他们在演练中更加清晰.他们只使用测试,信息等. (7认同)
  • 当我对'info'和'error'方法遇到同样的问题时,我使用`run_locally {...}`而不是`on ... {...}`.这将使您进入SSHKit上下文而无需连接到远程框. (3认同)
  • Capistrano`manage`方法依赖于`sshkit`中的实现.现在你可以在这里找到关于`execute`的更多信息:https://github.com/leehambley/sshkit Capistrano 3文档仍然不完整. (2认同)