Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Rails 5中下载最后20k行文件_Ruby On Rails_Ruby_Ruby On Rails 5 - Fatal编程技术网

Ruby on rails 在Rails 5中下载最后20k行文件

Ruby on rails 在Rails 5中下载最后20k行文件,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,我现在可以向rails控制器发出请求,并使用send_文件下载production.log文件。该文件已经变得巨大,我很少需要整个文件,所以我只想下载文件的一部分,如最后20k行。有没有一种方法可以在不读取最后n行并将其写入另一个文件,然后发送新创建的文件的情况下执行此操作 以下是我目前掌握的代码: def download_production_log send_file("#{Rails.root}/log/production.log") end 有没有办法不用读最后n行就可以做

我现在可以向rails控制器发出请求,并使用send_文件下载production.log文件。该文件已经变得巨大,我很少需要整个文件,所以我只想下载文件的一部分,如最后20k行。有没有一种方法可以在不读取最后n行并将其写入另一个文件,然后发送新创建的文件的情况下执行此操作

以下是我目前掌握的代码:

def download_production_log
    send_file("#{Rails.root}/log/production.log")
end
有没有办法不用读最后n行就可以做到这一点

是的,您不需要将最后n行保存到一个文件来提供服务。出于性能方面的原因,您可能希望这样做,但您不必这样做

诀窍是:在不读取整个文件的情况下,如何确定最后n行是什么?这是不可能的,没有一些扫描是不行的。如果线的大小是固定的,那就另当别论了。但事实上,最简单的方法(在我看来)是打开文件,只读取最后64kb的数据(或任何您需要的数据量)

有一个很好的变化,数据块将在某个日志行的中间开始。所以您只需丢弃此数据块的头部,直到(包括)第一个换行符。剩下的是整条木线。不完全是20k,但类似(如果您计算平均日志行长度并使用它来计算要读取的块的大小)

然后,您可以使用rails发送该块,就像它是一个真实的文件一样

有没有办法不用读最后n行就可以做到这一点

是的,您不需要将最后n行保存到一个文件来提供服务。出于性能方面的原因,您可能希望这样做,但您不必这样做

诀窍是:在不读取整个文件的情况下,如何确定最后n行是什么?这是不可能的,没有一些扫描是不行的。如果线的大小是固定的,那就另当别论了。但事实上,最简单的方法(在我看来)是打开文件,只读取最后64kb的数据(或任何您需要的数据量)

有一个很好的变化,数据块将在某个日志行的中间开始。所以您只需丢弃此数据块的头部,直到(包括)第一个换行符。剩下的是整条木线。不完全是20k,但类似(如果您计算平均日志行长度并使用它来计算要读取的块的大小)


然后您可以使用rails发送该块,就像它是一个真实的文件一样。

一个想法是在您的文件中执行
tail

我发现已经有一个宝石了


签出。

一个想法是在文件中执行
tail

我发现已经有一个宝石了

退房