我使用任务设置了一个基本的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
我甚至不确定这是我的本地设置还是服务器的问题。有什么想法吗?
答案 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