LoginSignup
4
5

More than 5 years have passed since last update.

Ruby アプリケーション

Last updated at Posted at 2013-10-29

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 の読込み設定を追加する。

/etc/httpd/conf/httpd.conf
~
# 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がデフォルトでは外部から繋がらなくなってたよ

main.rb
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 など

ruby_test.rb
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
4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5