4

Ruby (Rails やその他のフレームワークではない) で GET などのリクエスト データを簡単に取得するために最低限必要なものは何ですか?

このデータを取得するために ruby​​ on rails やその他のフレームワークを使用する必要がないようにしたいので、理想的な答えはフレームワークに依存しません。

私の現在のセットアップには、 apache ( )にruby​​ ファイル ( script) があります。cgi-binsite.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']
4

3 に答える 3

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

于 2012-10-15T21:39:14.657 に答える
5

フレームワークなしでこれを行わないでください。Sinatraのように、これを正しく行うために必要なサポートを確実に提供するためにできる限りのことをしない超軽量のものもあります。CGI は 1990 年代に死んだので、今戻ってくる必要はありません。

Sinatra アプリケーションを作成するには、基本的にメソッドを定義してから、それをサーバーにデプロイします。確かに、どれだけの作業が必要かについて不平を言うかもしれませんが、適切な展開手順がないと、開始する前に問題が発生します。

Ruby には、 Passengerのようなモジュールを介して Apache に接続する Rack のようなものを中心に構築された多くのインフラストラクチャがありcgi-bin、関連するすべてのリスクなしで、これまで以上に多くのことを実行できます。

典型的な Sinatra アプリは次のようになります。

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

実際には何もなく、古い CGI の方法よりもはるかに少ない作業で済みます。

于 2012-10-15T21:40:02.237 に答える
2

Web サーバーがスクリプトをCGIプログラムとして呼び出している場合、コンテンツはQUERY_STRING環境変数にあり、ENVオブジェクトを介してアクセスできます。フレームワークがなければ、これを個々の名前と値のペアに解析して、PHP の のようなものを取得する必要があります$_GET

Ruby は汎用プログラミング言語であるため、HTTP 要求や CGI 環境を処理するためのコア クラスやメソッドはありません。そのため、Ruby on Rails などのフレームワークを使用して、プロトコル レベルの解析とセットアップを処理することをお勧めします。間違いを犯す場所が多すぎるため、一からやり直す価値はありません。

于 2012-10-15T21:39:26.643 に答える