Capistrano伪终端(pty)无法正常工作

时间:2013-02-14 00:15:31

标签: ruby-on-rails capistrano

我使用任务设置了一个基本的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

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

1 个答案:

答案 0 :(得分: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