Ruby-web-applications
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"+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
}
}
}
}
注-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>')
これは、次の結果を生成します-
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
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ベースのサーバー上であなたのウェブサイトをホストするためにインターネット上の次のトピックをチェックすることができます-