1

我设置了一个带有任务的基本 config/deploy.rb 文件:

task :blah do
  run ". ~/blah.sh"
end

而在服务器上,blah.sh 文件只是提示输入:

while true; do
    read -p "Say something: " blah
done

Capistrano 可以很好地连接到我的服务器,并且正常命令也可以正常工作。当我运行cap blah它时,它会提示我输入,但无论我输入什么,它都不会发送回服务器。输出如下所示:

  * 2013-02-13 19:12:36 executing `blah'
  * executing ". ~/blah.sh"
    servers: ["192.81.214.76"]
    [192.81.214.76] executing command
 ** [out :: 192.81.214.76] Say something:

而且无论我输入什么它都不会响应。

注意我确实设置了default_run_options[:pty] = true

我什至不确定这是我的本地设置还是服务器的问题。有任何想法吗?

4

1 回答 1

0

不要使用 sh 脚本,而是使用 rake 任务(这就是我所做的,无论如何)

namespace :interact do
    task :say_something do
        system("read -p 'Say something: ' blah && echo $blah")
    end
end

然后使用可以处理与远程服务器来回通信的运行命令设置 capistrano 任务

namespace :interact do
    task :say_something do
        run "cd #{deploy_to}/current && #{rake} interact:say_something", :pty => true do |ch, stream, data|
            if data =~ /Say something:/
                # prompt, and then send the response to the remote process
                ch.send_data(Capistrano::CLI.password_prompt("Say something (to the remote server): ") + "\n")
            else
                # use the default handler for all other text
                Capistrano::Configuration.default_io_proc.call(ch, stream, data)
            end
        end
    end
end

感谢http://comments.gmane.org/gmane.comp.lang.ruby.capistrano.general/5038这是基于

于 2013-07-09T06:10:46.057 回答