Ruby相当于PHP的$ _GET

时间:2012-10-15 21:26:01

标签: ruby apache cgi-bin

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

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

我当前的设置在apache script上的cgi-bin中有一个ruby文件(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']

3 个答案:

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

因此site.com/script?hi=there会输出hi\nthere

答案 1 :(得分:5)

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

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

Ruby有许多基础架构构建的基础架构,它通过像Passenger这样的模块挂钩到Apache,这些模块比cgi-bin执行的操作要多得多,而且没有与之相关的所有风险。

典型的Sinatra应用程序如下:

get '/example/:id' do
  "Example #{params[:id]}!"
end

真的没什么可比的,它最终比旧的CGI方式更少很多

答案 2 :(得分:2)

如果您的Web服务器将脚本作为CGI程序调用,则内容将位于QUERY_STRING环境变量中,可通过ENV对象访问。如果没有框架,您必须将其解析为单独的名称 - 值对,以获得类似PHP $_GET的内容。

因为Ruby是一种通用编程语言,所以它没有用于处理HTTP请求或CGI环境的核心类和方法。这就是为什么建议使用诸如Ruby on Rails之类的框架来处理协议级解析和设置。犯错误的地方太多了,不值得重新发明。