eRuby
2016年も終わろうとしているこのときに CGI な eRuby を使っている人がどれだけいるのかというとあやしいですが、とりあえず知見として。
eRuby(erb)を CGI で
下記のサイトなどの方法で、任意のファイルに Ruby スクリプト を埋め込んで Web に展開できます(感謝)。
ERBによるWebアプリケーション開発(1/3):初心者のためのRubyプログラミング入門 - libro
http://combitaro.net/article/160
しかしながら、POSTデータを渡すことができません。
POST を渡すために(元データ)
POSTデータを渡すためには、バイパスしているスクリプトに手を加える必要があります。
元のスクリプトは以下のとおりです(解説は上記サイトを参照してください)。
#!/usr/bin/ruby require 'erb' require 'cgi' puts 'Content-Type: text/html; charset=utf-8' puts ERB.new(IO.read(CGI.new.path_translated)).run
POST を渡すために(修正データ)
バイパスをかましているために POSTデータ が失われています。ですので、下記のように書き加えましょう。
#!/usr/bin/ruby require 'erb' require 'cgi' puts 'Content-Type: text/html; charset=utf-8' puts cgi = CGI.new params = cgi.params ERB.new(IO.read(CGI.new.path_translated)).run
これで「params」にハッシュで返ってきます。<input type="text" name="address"> のような1つだけのデータを送る単純なフォームの場合ですと、params["address"][0] で取得できます*1。
さらに改修
より使いやすく変更したい場合は以下のドキュメントを参考にしてみてください。
library cgi (Ruby 3.1 リファレンスマニュアル)
*1:もちろん GET も返ってきます