gpt4 book ai didi

ruby - 通过 HTTP 流式传输控制台输出(使用 Ruby)

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:42 25 4
gpt4 key购买 nike

我正在尝试远程运行一些命令,但无法通过 SSH 连接到机器。我想要做的是设置一个 Sinatra 应用程序,它运行一些特定的命令并通过 HTTP 流式传输输出。

示例操作如下所示:

get "/log" do
`tail -f some.log`
end

1 据我所知,我需要使用 Unicorn(或 Mongrel),因为 Thin 不支持流数据2 我想我需要通过某种 IO ruby​​ 对象管道命令输出

我几乎知道如何做 (1),但不知道如何实现 (2)。

最佳答案

如果您在同步服务器上(即 Mongrel、Unicorn、notThin),您可以只返回一个 IO 对象:

require 'sinatra'

get '/log' do
content_type :txt
IO.popen('tail -f some.log')
end

如果这不起作用(例如,如果您使用的是 Thin),您可以使用新的流式 API:

require 'sinatra'

get '/log' do
content_type :txt
IO.popen('tail -f some.log') do |io|
stream do |out|
io.each { |s| out << s }
end
end
end

您还可以使用 bcat gem,它将为您的输出着色,如果它包含 ANSI 颜色代码:

require 'sinatra'
require 'bcat'

get '/log' do
command = %[tail -f some.log]
bcat = Bcat.new(command, :command => true)
bcat.to_app.call(env)
end

注意:对于无限运行的进程,如果有人关闭连接,您必须自行终止进程。对于第一个解决方案,某些服务器可能会为您处理。

关于ruby - 通过 HTTP 流式传输控制台输出(使用 Ruby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7684784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com