Ruby On Rails 3.1 中的尾随日志文件

Posted

技术标签:

【中文标题】Ruby On Rails 3.1 中的尾随日志文件【英文标题】:Tailing Logfile in Ruby On Rails 3.1 【发布时间】:2012-05-08 05:53:15 【问题描述】:

我有一些脚本必须从我的 ruby​​ on rails 应用程序中执行。为确保脚本执行应有的操作,我的应用程序必须显示/跟踪从脚本生成的日志文件的内容。

更详细地说:我希望脚本可以通过串行连接(某种推出机制)配置一些黑盒设备。所以我必须观察,例如,更新过程或连接设备的重启(以验证一切正常)。这是我写入日志文件的内容。

因此我需要:

    执行一个进程并处理退出代码 tail a/一些日志文件(可能是 javascripthtml5?)

我怎么能这样做?示例将非常感激!

非常感谢!

【问题讨论】:

【参考方案1】:

#1 的答案很简单,系统调用,即

ret = system('ls','-l')

如果命令的退出状态为零,则ret 将为真。美元?将包含一个 Process::Status 对象,您可以从中获取退出状态

unless system('ls','-l','/a_bogus_dir')
  logger.debug("ls failed with #$?.exitstatus")
end

#2 的答案可以通过多种方式完成。您可以创建一个控制器操作,该操作只需抓取文件系统中特定文件的内容并返回内容。

def get_file_contents
  File.open(params[:file_to_read],"r")  |f| @contents = f.read 
  respond_to |format|
    format.js
  end
end

然后创建文件get_file_contents.js.erb:

$('#display_div').html('<%= escape_javascript(@contents) %>');

然后您必须在您的页面上创建某种计时器来重复调用该控制器操作,我使用 jquery.timers。在计时器循环中,您会调用

$.get('/get_file_contents?file_to_read=public/logfile');

这将访问控制器,获取文件内容,并执行 get_file_contents.js.erb,这将使用文件的当前内容更新 div。

您必须将路由 /get_file_contents 添加到 routes.rb。

【讨论】:

对不起。可悲的是,我在这里咬了花岗岩。没有得到它的工作。它没有显示任何更新。它似乎用 html 而不是“js”来响应。我还创建了一个名为“get_file_contents.html.erb”的文件,其中包含我的“display_div”和你的“get_file_contents.js.erb”。但是我有一个空网站(里面没有 html)。

以上是关于Ruby On Rails 3.1 中的尾随日志文件的主要内容,如果未能解决你的问题,请参考以下文章

替换 Ruby on Rails 3.1 中的“auto_link”方法

Ruby on Rails 中的多个日志文件和日志轮换

mass_assignment_authorizer 的更改导致 Ruby on Rails 3.1 中的错误

Cpanel 中的 Ruby On Rails 问题

使用 Ruby on Rails 在文本区域中保留换行符

Ruby on Rails 生产日志轮换