在页面刷新时运行ruby脚本

时间:2014-01-08 05:31:01

标签: ruby

我有一个ruby脚本run-this.rb,当我运行时会将实时计算输出到文本文件

ruby run-this.rb > output.txt

但是,我需要将相同的过程加载到Web服务器上,其中Ruby脚本将在页面加载时运行,并且网页将从txt文件中读取结果。

我的问题是两部分,

1)如何告诉网页在加载时运行此脚本?

2)如何在页面刷新时将run-this.rb的结果输出到output.txt

谢谢!

1 个答案:

答案 0 :(得分:6)

您可以使用Sinatra framework构建一个简单的Web应用程序

  • 运行您的脚本
  • 将输出保存在变量
  • 将变量内容写入文件
  • 然后还将变量内容写入HTTP响应

但是我建议你将脚本封装在Ruby类中,这样可以更容易地从另一个文件运行。例如,在run-this.rb

class FooRunner
  def self.run!
    # write to string instead of printing with puts
    result = ''

    # do your computations and append to result
    result << 'hello, world!'

    # return string
    result
  end
end

# maintain old functionality: when running the script
# directly with `ruby run-this.rb`, simply run the code
# above and print the result to stdout
if __FILE__ == $0
  puts FooRunner.run!
end

在同一目录中,您现在可以拥有第二个文件server.rb,该文件将执行上面列表中列出的步骤:

require 'sinatra'
require './run-this'

get '/' do
  # run script and save result to variable
  result = FooRunner.run!

  # write result to output.txt
  File.open('output.txt','w') do |f|
    f.write result
  end

  # return result to be written to HTTP response
  content_type :text
  result
end

使用gem install sinatra安装Sinatra后,您可以使用ruby server.rb启动服务器。输出将告诉您指向浏览器的位置:

[2014-01-08 07:06:58] INFO  WEBrick 1.3.1
[2014-01-08 07:06:58] INFO  ruby 2.0.0 (2013-06-27) [x86_64-darwin12.3.0]
== Sinatra/1.4.4 has taken the stage on 4567 for development with backup from WEBrick
[2014-01-08 07:06:58] INFO  WEBrick::HTTPServer#start: pid=92108 port=4567

这意味着您的页面现已在http://127.0.0.1:4567处可用,因此请在浏览器中输入此页面。 Etvoilá!

screenshot of browser with above page

显示页面后,该目录还将包含具有相同内容的output.txt