RubyWebアプリケーション-CGIプログラミング

Rubyは汎用言語です。Web言語とはまったく呼べません。それでも、一般的にWebアプリケーションとWebツールはRubyの最も一般的な使用法の1つです。

Rubyで独自のSMTPサーバー、FTPデーモン、またはWebサーバーを作成できるだけでなく、CGIプログラミングなどのより一般的なタスクやPHPの代わりにRubyを使用することもできます。

CGIプログラミングの詳細については、CGIプログラミングチュートリアルで数分を費やしてください。

CGIスクリプトの作成

最も基本的なRubyCGIスクリプトは次のようになります-

#!/usr/bin/ruby

puts "HTTP/1.0 200 OK"
puts "Content-type: text/html\n\n"
puts "<html><body>This is a test</body></html>"

このスクリプトtest.cgiを呼び出して、適切なアクセス許可を持つUnixベースのWebホスティングプロバイダーにアップロードすると、CGIスクリプトとして使用できます。

たとえば、Webサイトがある場合 https://www.example.com/Linux Webホスティングプロバイダーでホストされており、test.cgiをメインディレクトリにアップロードして実行権限を付与してから、https://www.example.com/test.cgi 次のようなHTMLページを返す必要があります This is a test

ここで、Webブラウザーからtest.cgiが要求されると、WebサーバーはWebサイトでtest.cgiを探し、Rubyインタープリターを使用してそれを実行します。Rubyスクリプトは、基本HTTPヘッダーを返し、次に基本HTMLドキュメントを返します。

cgi.rbの使用

Rubyには、という特別なライブラリが付属しています cgi これにより、前述のCGIスクリプトを使用した場合よりも高度な対話が可能になります。

cgiを使用する基本的なCGIスクリプトを作成しましょう−

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new

puts cgi.header
puts "<html><body>This is a test</body></html>"

ここでは、CGIオブジェクトを作成し、それを使用してヘッダー行を印刷しました。

フォーム処理

クラスCGIを使用すると、2つの方法でHTMLクエリパラメータにアクセスできます。/cgi-bin/test.cgi?FirstName = Zara&LastName = AliのURLが与えられたとします。

次のように、CGI#[]を使用してパラメータFirstNameおよびLastNameに直接アクセスできます。

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi['FirstName'] # =>  ["Zara"]
cgi['LastName']  # =>  ["Ali"]

これらのフォーム変数にアクセスする別の方法があります。このコードは、すべてのキーと値のハッシュを提供します-

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
h = cgi.params  # =>  {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName']  # =>  ["Zara"]
h['LastName']   # =>  ["Ali"]

以下は、すべてのキーを取得するためのコードです-

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi.keys         # =>  ["FirstName", "LastName"]

フォームに同じ名前の複数のフィールドが含まれている場合、対応する値が配列としてスクリプトに返されます。[]アクセサーは、これらすべてを取得するために、これらの最初の.indexをparamsメソッドの結果として返します。

この例では、フォームに「name」という3つのフィールドがあり、「Zara」、「Huma」、「Nuha」の3つの名前を入力したとします。

#!/usr/bin/ruby

require 'cgi'
cgi = CGI.new
cgi['name']        # => "Zara"
cgi.params['name'] # => ["Zara", "Huma", "Nuha"]
cgi.keys           # => ["name"]
cgi.params         # => {"name"=>["Zara", "Huma", "Nuha"]}

Note−RubyはGETメソッドとPOSTメソッドを自動的に処理します。これらの2つの異なる方法に別々の治療法はありません。

正しいデータを送信できる、関連付けられているが基本的なフォームには、次のようなHTMLコードが含まれます。

<html>
   <body>
      <form method = "POST" action = "http://www.example.com/test.cgi">
         First Name :<input type = "text" name = "FirstName" value = "" />
         <br />
         Last Name :<input type = "text" name = "LastName" value = "" /> 
         <input type = "submit" value = "Submit Data" />
      </form>
   </body>
</html>

フォームとHTMLの作成

CGIには、HTMLの作成に使用される膨大な数のメソッドが含まれています。タグごとに1つのメソッドがあります。これらのメソッドを有効にするには、CGI.newを呼び出してCGIオブジェクトを作成する必要があります。

タグのネストを容易にするために、これらのメソッドはコンテンツをコードブロックとして受け取ります。コードブロックは、タグのコンテンツとして使用される文字列を返す必要があります。例-

#!/usr/bin/ruby

require "cgi"
cgi = CGI.new("html4")
cgi.out {
   cgi.html {
      cgi.head { "\n"+cgi.title{"This Is a Test"} } +
      cgi.body { "\n"+
         cgi.form {"\n"+
            cgi.hr +
            cgi.h1 { "A Form: " } + "\n"+
            cgi.textarea("get_text") +"\n"+
            cgi.br +
            cgi.submit
         }
      }
   }
}

NOTE− CGIクラスのformメソッドは、フォーム送信で使用されるHTTPメソッド(GET、POSTなど)を設定するメソッドパラメーターを受け入れることができます。この例で使用されるデフォルトはPOSTです。

これにより、次の結果が生成されます-

Content-Type: text/html
Content-Length: 302

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">

<HTML>
   <HEAD>
      <TITLE>This Is a Test</TITLE>
   </HEAD>
   <BODY>
      <FORM METHOD = "post" ENCTYPE = "application/x-www-form-urlencoded">
         <HR>
         <H1>A Form: </H1>
         <TEXTAREA COLS = "70" NAME = "get_text" ROWS = "10"></TEXTAREA>
         <BR>
         <INPUT TYPE = "submit">
      </FORM>
   </BODY>
</HTML>

文字列の引用

URLやHTMLコードを扱うときは、特定の文字を引用するように注意する必要があります。たとえば、スラッシュ文字(/)はURLで特別な意味を持つため、次のようにする必要があります。escaped パス名の一部でない場合。

たとえば、URLのクエリ部分の/は文字列%2Fに変換され、使用するには/に戻す必要があります。スペースとアンパサンドも特殊文字です。これを処理するために、CGIはルーチンを提供しますCGI.escape そして CGI.unescape

#!/usr/bin/ruby

require 'cgi'
puts CGI.escape(Zara Ali/A Sweet & Sour Girl")

これにより、次の結果が生成されます-

Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/ruby

require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')

これにより、次の結果が生成されます-

&lt;h1&gt;Zara Ali/A Sweet & Sour Girl&lt;/h1&gt;'

CGIクラスの便利なメソッド

これがCGIクラスに関連するメソッドのリストです-

  • RubyのCGI -標準CGIライブラリーに関連するメソッド。

クッキーとセッション

これらの2つの概念については、さまざまなセクションで説明しました。セクションに従ってください-

  • RubyのCGIクッキー- CGIクッキーを処理する方法。

  • RubyのCGIセッション- CGIセッションを管理する方法。

Webホスティングサーバー

インターネットで次のトピックをチェックして、UnixベースのサーバーでWebサイトをホストできます。

  • UnixベースのWebホスティング