我有一个ruby脚本run-this.rb
,当我运行时会将实时计算输出到文本文件
ruby run-this.rb > output.txt
但是,我需要将相同的过程加载到Web服务器上,其中Ruby脚本将在页面加载时运行,并且网页将从txt文件中读取结果。
我的问题是两部分,
1)如何告诉网页在加载时运行此脚本?
和
2)如何在页面刷新时将run-this.rb
的结果输出到output.txt
?
谢谢!
答案 0 :(得分:6)
您可以使用Sinatra framework构建一个简单的Web应用程序
但是我建议你将脚本封装在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á!
显示页面后,该目录还将包含具有相同内容的output.txt
。