最近要做一个小功能,点击一个按钮,通过 rails 调用系统自带的 hugo 程序,想要把 hugo 启动后的日志打印输出刀 rails 的 web 页面上。 这个东西前端需要什么技术?不知道有没有人了解过这种需求。我以前没做过,不太懂,好像不是前端 ajax 轮训这么操作的。
get '/log', provides: 'text/event-stream' do
stream :keep_open do |out|
settings.connections << out
out.callback { settings.connections.delete(out) }
end
end
https://github.com/kyuubi9/apitest
https://github.com/kyuubi9/apitest/blob/master/lib/apitest.rb
之前的一个实现,核心代码
Process.detach(
fork do
p 'Kill Apitest WebSocket Process ...'
`lsof -i :9527 |awk '$1 == "ruby" {print $2}' |xargs kill -9`
begin
filename = "#{Rails.root}/log/#{Rails.env}.log"
EventMachine.run do
WebSocket::EventMachine::Server.start(:host => "0.0.0.0", :port => 9527) do |ws|
proc = Proc.new { |line|
ws.send Ansi::To::Html.new(line.strip).to_html.strip
}
EventMachine::file_tail(filename, Reader, &proc)
end
p 'Start Apitest WebSocket Process !'
end
rescue Exception => e
retry
end
end
)