"Ruby" タグがついている記事

  • 2008/04/18 14:19

    Rails 環境調査

    最近Ruby on Railsの面白さにハマり、いろいろネットで情報を収集しています。
    皆さん様々な環境やサーバソフトウェアの組み合わせで試みているようですね。
    今回はRailsアプリケーションを動かす環境について、自分なりのまとめです。

    httpサーバ

    lighttpd

    その名の通り、「軽い」httpサーバ。また、安全で柔軟性もあるとされる。
    Apacheとのベンチマーク比較でも、同等かわずかに上回るパフォーマンスとのこと。

    Mongrel

    Rails アプリケーションサーバ。Java世界で言うところの、Jakarta Tomcat。
    RubyとCの拡張ライブラリで書かれている。
    Apacheをリバースプロキシとして動作させ、Railsアプリはmongrel_cluster(負荷分散や複数のRailsアプリを動作させるためのMongrelプロセス複数起動)という役割で利用されることが多い。

    WEBrick

    Rubyに標準添付されているhttpサーバソフトウェア。
    公式ページにはhttpサーバ構築のためのライブラリと記されている。主に開発用に使用する。

    WEBrick is a Ruby library program to build HTTP servers.
    via: RAA – webrick

    実際にWEBrickでhttpプロキシサーバを作るチュートリアルがこちらに載っている。

    httpサーバと組み合わせるモジュール

    FastCGI

    CGIはクライアントからhttpリクエストがある都度プロセスを立ち上げ、レスポンスを返した後にそのプロセスを落とす。このオーバーヘッドを無くそうとしたものがFastCGI。FastCGIによって起動されたCGIプログラムはHTTPDプロセスとは別に起動するが、CGIの処理が終了してもプロセスは残る。そのプロセスを使い回すことでパフォーマンスの向上が図れる。
    こちらにより詳細な解説があります。

    Passenger(mod_ruby)

    RailsアプリケーションをApache上で動作させるためのモジュール。PHPでいうところの、mod_php。これがあればMongrelやWEBrickは不要。パフォーマンスにおいてもMongrelより(ちょっと)早いらしい。

    画像は公式サイトより。
    インストール方法など詳細な解説はこちら。

    まとめ
    最近リリースされたPassengerが一番手軽そうですが、信頼性についてはまだまだ未知数です。

  • 2008/04/01 18:44

    Rubyでデザインパターン -Command-

    最近Rubyを勉強してます(遅いって?)。Rubyのソースを見る度に、なぜか受け付け難い雰囲気を感じていたのですが、最近会う人会う人がRuby(on Rails)で開発しているよ的な発言をされているので、やむにやまれず触発された感じです。

    言語学習はやっぱりコード書かなきゃと思いましたので、ここに晒す次第です。あまりデザインパターンに意味はありません。

    クラス図

    CommandExecutor.rb
    class CommandExecutor
    def initialize
    @commands = Array.new
    end
    def setCommand cmd
    @commands << cmd
    end
    def execute
    @commands.each do |cmd|
    cmd.execute
    end
    end
    end

    AbstractCommand.rb
    class AbstractCommand
    def initialize
    @option = ”;
    @command = ”;
    end
    def execute
    %x{@command};
    end
    def setOption opt
    @option = opt
    end
    end

    CurrentDirCommand.rb
    require ‘AbstractCommand.rb’
    class CurrentDirCommand < AbstractCommand
    def initialize
    @command = 'pwd';
    end
    def execute
    STDOUT << %x{#{@command}}
    end
    end

    ListCommand.rb
    require ‘AbstractCommand.rb’
    class ListCommand < AbstractCommand
    def initialize
    @command = 'ls';
    end
    def execute
    if @option.nil? then
    cmd = @command
    else
    cmd = @command [...]