Ruby-web-applications

提供:Dev Guides
移動先:案内検索

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

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

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

CGIプログラミングの詳細については、リンク:/perl/perl_cgi [CGIプログラミング]チュートリアルで数分お過ごしください。

CGIスクリプトの作成

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

#!/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スクリプトとして使用できます。

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

ここで、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"]

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

この例では、フォームに「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"]}

注意-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オブジェクトを作成する必要があります。

タグのネストを簡単にするために、これらのメソッドはコンテンツをコードブロックとして取得します。 コードブロックは、タグのコンテンツとして使用される_String_を返す必要があります。 たとえば-

#!/usr/bin/ruby

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

-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で特別な意味を持つため、パス名の一部でない場合は*エスケープする必要があります。

たとえば、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​​/ruby​​_cgi_methods [Ruby CGI]-標準CGIライブラリに関連するメソッド。

クッキーとセッション

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

  • リンク:/ruby​​/ruby​​_cgi_cookies [Ruby CGI Cookies]-CGI Cookieの処理方法。
  • リンク:/ruby​​/ruby​​_cgi_sessions [Ruby CGI Sessions]-CGIセッションを管理する方法。

ウェブホスティングサーバー

あなたは、Unixベースのサーバー上であなたのウェブサイトをホストするためにインターネット上の次のトピックをチェックすることができます-