Ruby On Rails 3.1中的Tailing Logfile

时间:2012-04-27 13:18:25

标签: javascript jquery ruby-on-rails html5 ruby-on-rails-3.1

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

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

因此我需要:

  1. 执行流程并处理退出代码
  2. 尾巴/一些日志文件(可能是Javascript或html5?)
  3. 我怎么能这样做?例子真的很感激!

    非常感谢!

1 个答案:

答案 0 :(得分: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。

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