【问题标题】:How to run shell commands on server in Capistrano v3?如何在 Capistrano v3 的服务器上运行 shell 命令?
【发布时间】:2013-09-16 23:20:37
【问题描述】:

我是 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 块中。

标签: ruby capistrano3


【解决方案1】:

在 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/

【讨论】:

  • 太棒了,我希望他们在演练中更清楚。他们只使用测试、信息等。
  • Capistrano execute 方法依赖于 sshkit 中的实现。现在您可以在此处找到有关execute 的更多信息:github.com/leehambley/sshkit Capistrano 3 文档仍然不完整。
  • @KitHo 是的,您可以使用 sudo,就像使用手动 ssh 连接一样。
  • 当我在使用 'info' 和 'error' 方法时遇到同样的问题时,我使用了run_locally { ... } 而不是on ... { ... }。这可以让您进入 SSHKit 上下文,而无需连接到远程机器。
猜你喜欢
  • 2011-04-05
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
相关资源
最近更新 更多