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

Tailing Logfile in Ruby On Rails 3.1

提问人:Jens Schmidt 提问时间:4/27/2012 更新时间:4/28/2012 访问量:101

问:

我有一些脚本,我必须从我的Ruby on Rails应用程序中执行。为了确保脚本执行应有的操作,我的应用程序必须显示/尾随从脚本生成的日志文件的内容。

更详细地说:我期望通过系列连接(某种推出机制)配置一些黑匣子设备的脚本。因此,例如,我必须观看更新过程或连接设备的重新启动(以验证一切正常)。这是我写到日志文件的内容。

因此,我需要:

  1. 执行进程并处理退出代码
  2. tail a/some 日志文件(也许是 Javascript 或 html5?

我该怎么做?例子将不胜感激!

多谢!

javascript jquery html ruby-on-rails-3.1

评论


答:

1赞 RadBrad 4/28/2012 #1

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

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

如果命令的退出状态为零,则 ret 将为 true。$?将包含一个 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。

评论

0赞 Jens Schmidt 6/22/2012
不好意思。可悲的是,我在这里咬了花岗岩。没有让它工作。它不显示任何更新。它似乎用 html 而不是“js”来响应。我另外创建了一个名为“get_file_contents.html.erb”的文件,其中包含我的“display_div”和您的“get_file_contents.js.erb”。但是我有一个空的网站(里面没有html)。