Ruby インストール
参考:CentOS5.5にRuby 1.9.3をインストール
必要なパッケージをインストール
rubyソフトをrpmで管理するために、checkinstallをインストールする。
# wget http://packages.sw.be/checkinstall/checkinstall-1.6.0-3.el4.rf.x86_64.rpm
# rpm -ivh checkinstall-1.6.0-3.el4.rf.x86_64.rpm
# yum -y install zlib-devel openssl-devel readline-devel \
libxml2-devel bzip2-devel libjpeg-devel libpng-devel \
freetype-devel libyaml-devel libffi-devel
rubyをインストール
rubyをrpmで管理する。
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p448.tar.gz
# cd ruby-1.9.3-p448
# ./configure
# make
# /usr/sbin/checkinstall --fstrans=no
# rpm -ivh --nodeps --nomd5 /usr/src/redhat/RPMS/x86_64/ruby-1.9.3-p448-1.x86_64.rpm
apache 設定変更
参考:Rubyインストール
.rb の読込み設定を追加する。
~
# Rubyスクリプトとして扱う拡張子を追記
# Rubyスクリプトも拡張子「.cgi」とするなら追記の必要なし
AddHandler cgi-script .cgi .pl .rb
~
apache を再起動。
# /etc/init.d/httpd restart
Sinatra インストール
Ruby用のWebアプリケーションフレームワーク Sinatra を利用する。
# gem install sinatra
Hello World を出力
Hello World を出力する main.rb をサーバ内の任意の場所に作成する。
2行目の set :environment, :production は外部からアクセスするために必要。
実行時にオプションをつけてもよい。(-e production)
Sinatraがデフォルトでは外部から繋がらなくなってたよ
require 'sinatra'
set :environment, :production
get '/' do
"Hello,World."
end
以下のコマンドで main.rb を実行。
$ ruby main.rb
http://ホスト名:4567 にアクセスすると、"Hello World" が出力される。
表示されない場合は、iptables の設定を見直す。
mysqlを使う
ruby-mysql インストール (ver 2.9.11)
# gem install ruby-mysql
ruby-mysql 2.9.11 では mysql のパスワードタイプが古いと mysql に接続できないので、mysql でユーザーのパスワードを新しいタイプに変更する。
SET PASSWORD FOR 'ユーザー' = PASSWORD('パスワード')
FLUSH PRIVILAGES
HTTPリクエストのパラメータを取得して、DBを検索する Sinatra のアプリケーションは次の通りである。
http://192.168.0.242:4567/ruby_test
のURLでGETリクエストができる。パラメーターは ?id1=102 など
require 'sinatra'
require 'mysql'
require './content.rb'
set :environment, :production
get '/ruby_test' do
gid1 = params[ID1].to_i
gid2 = params[ID2].to_i
if !(gid1 == 0) && !(gid2 == 0) then
'NG 301'
elsif gid1 == 0 && gid2 == 0 then
'NG 302'
elsif !(gid1 == 0) then
if MIN <= gid1 && gid1 <= MAX then
my = Mysql::new(HOST, USER, PASS, DB)
selectSql = 'SELECT * FROM ' + TB + ' WHERE ' + ID1 + ' = ' + gid1.to_s + ';'
res = my.query(selectSql)
ret = ''
res.each_hash do |row|
id1 = row[ID1]
id2 = row[ID2]
letter = row[LET]
ret = ID1 + ':' + id1 + ' ' + ID2 + ':' + id2 + ' ' + LET + ':' + letter
end
ret
else
'NG 303'
end
elsif !(gid2 == 0) then
if MIN <= gid2 && gid2 <= MAX then
my = Mysql::new(HOST, USER, PASS, DB)
selectSql = 'SELECT * FROM ' + TB + ' WHERE ' + ID2 + ' = ' + gid2.to_s + ';'
res = my.query(selectSql)
ret = ''
res.each_hash do |row|
id1 = row[ID1]
id2 = row[ID2]
letter = row[LET]
ret = ID1 + ':' + id1 + ' ' + ID2 + ':' + id2 + ' ' + LET + ':' + letter
end
ret
else
'NG 303'
end
else
'NG 304'
end
end