Ruby相当于PHP的$ _GET

tes*_*ter 4 ruby apache cgi-bin

我需要在Ruby(不是Rails或任何其他框架)中轻松获取GET等请求数据的最低要求是什么?

我想避免在rails或任何其他框架上使用ruby来获取这些数据,因此理想的答案不会有框架依赖.

我的当前设置有一个ruby文件(script)在cgi-bin上阿帕奇(site.com/script)

#!/usr/bin/env ruby

# bare minimum to output content
puts "Content-type: text/html"
puts

puts "it works!" #works fine.

# how would I obtain request data like GET parameters here
# for a url like site.com/script?hi=there
# in PHP, I would $_GET['hi']
Run Code Online (Sandbox Code Playgroud)

tes*_*ter 5

啊,使用CGI类解决了我的问题.

http://www.ruby-doc.org/stdlib-1.9.3/libdoc/cgi/rdoc/CGI.html

require 'cgi'

cgi = CGI.new

cgi.params.each do |key, val|
   puts key
   puts val
end
Run Code Online (Sandbox Code Playgroud)

那么site.com/script?hi=there输出hi\nthere


tad*_*man 5

如果没有框架,请不要这样做.像Sinatra这样的超轻量级产品可以尽可能少地确保您获得正确执行此操作所需的支持.CGI在20世纪90年代去世,现在不需要回来.

要编写Sinatra应用程序,您基本上定义了一个方法,然后将其部署到您的服务器.当然,你可能会抱怨工作量是多少,但是如果你没有适当的部署程序,那么在你开始之前就遇到了麻烦.

Ruby有许多基础设施建立起来的基础设施,通过像Passenger这样的模块连接到Apache ,比cgi-bin以往任何时候都做得更多,没有与之相关的所有风险.

典型的Sinatra应用程序看起来像:

get '/example/:id' do
  "Example #{params[:id]}!"
end
Run Code Online (Sandbox Code Playgroud)

没什么好说的吧,它最终是一个很多较老的CGI方式工作量少.