我是Capistrano的新手,我曾try 使用Capistrano的DSL在服务器上运行shell命令("run"、"execute"等),但它似乎已被弃用.在一次又一次地寻找功能类似功能之后,我仍然迷路了.

当前代码:

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

推荐答案

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

Ruby相关问答推荐

是什么导致游戏对象中的命名错误?

Ruby 中的 Hash[key] 返回 nil 但 hash 没有 nil 值

如何使 Sinatra 通过 HTTPS/SSL 工作?

Ruby:通过正则表达式过滤数组?

如何在 Ruby 中生成子进程?

在 RSpec-2.11 中使用隐含的 `subject` 和 `expect`

在 Ruby 中将数组转换为索引哈希

如何在控制台中禁用 MongoDB 日志(log)消息?

如何从 SystemStackError 中获取回溯:堆栈级别太深?

将哈希转换为 struct

Unexpected Return (LocalJumpError)

为什么显式返回会对 Proc 产生影响?

Ruby 中的超级关键字

Ruby 异常 - 为什么是else?

Ruby 将 CSV 文件读取为 UTF-8 和/或将 ASCII-8Bit 编码转换为 UTF-8

默认情况下需要查找的路径是什么?

判断整数是否在范围内

遍历数组的前 n 个元素

为依赖于环境变量的代码编写规范的最佳方法是什么?

查找两个数组的共同点