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

  • 2009/10/13 09:13

    Railsアプリのパフォーマンスモニタ 「New Relic」を入れてみた

    弊社サバゲ〜るの開発では以前、開発環境にFiveRuns TuneUpをインストールしてみたことがあり、これは便利だ是非活用しようと思ったまま、なかなか手つかずの状態になっていました。

    FiveRuns TuneUpとは、Railsアプリケーションのパフォーマンスチューニングに役立つ情報を、グラフィカルに表示してくれるプラグインです。

    今回、久々にブログ更新しようと思って真っ先に思いついたのがそのFiveRuns TuneUpネタでした。活用方法を調べようと思い、FiveRunsの本家サイトを見たら、

    ・Workthinkなる会社に買収されたよ、今ははそっちで新しい製品を作っているよ
    ・「DASH」というサービスは終了するのでデータをエキスポートしてね

    と掲示されているページだけがあり、TuneUpプラグインはどうなるのかとか、それまで提供していたサービスについては言及されていません。。

    TuneUpはあきらめ、類似サービスを調べたところ、masuidriveさんも利用しているという、New Relicが良さげということが分かりました。
    New Relicも TuneUp と同様に Railsアプリケーションにプラグインをインストールし、そのプラグインがNew Relic側にデータを送信し、蓄積するという仕組みです。

    料金体系は以下の通りです。今回はお試しということでLiteアカウントを選択してみます。

    Free subscribeをクリックし、必要情報を入力し、Submitします。
    しばらくすると入力したメアドにメールが届くので、URLをクリックしアクティベーションを行います。

    アクティベーション後、Home(Myページ)にプラグインのインストール方法が載っています。ページ上部に小さくRPM Version2が出てるよと表示されているので、せっかくなのでそれにしてみます。

    掲載されているとおりに手元の開発環境をセットアップします。

    1. Railsアプリケーションにプラグイン(Agent)を入れる
    [masayuki@dev_svgr_jp /var/local/projects/svgr.jp]$ script/plugin install http://newrelic.rubyforge.org/svn/newrelic_rpm –force
    + ./CHANGELOG
    + ./LICENSE
    + ./README.md
    + ./Rakefile
    + ./bin/mongrel_rpm
    + ./bin/newrelic_cmd
    + ./cert/cacert.pem
    + ./init.rb
    + ./install.rb
    + ./lib/new_relic/agent/agent.rb
    + ./lib/new_relic/agent/chained_call.rb
    – 略 –

    このプラグインが定期的に性能データをNew Relic側に送信するようです。

    2. config/newrelic.yml を作成する
    HOMEからnewrelic.ymlをダウンロードし、configディレクトリに置きます。デフォルトではproduction / staging環境のみ有効になっているので、developmentでも有効になるよう、172行目を trueにします。

    3. Railsアプリを再起動する
    さて、サクッとインストールできたようなので、データが蓄積されるまで開発環境をいじっておきます。
    10分ほどいじった後、New Relicを見てみます。

    おお! どうやらデータが取得できているようです。

    My Applicationをクリックすると、概要が表示されます。

    この画面で確認できるのは、以下の通り

    平均レスポンスタイム(Ruby / DB)
    Apdexスコア

    Apdex(Application Performance Index)とは、アプリケーションの性能を定義する標準的な指標とのこと。

    詳しくは、こちらを参照。
    スループット(request per minute ?)
    ホスト毎のCPU使用率、メモリ使用量
    直近のイベントノート(コメント)、デプロイ履歴など

    なお、Overview以外の下記のタブは、Bronzeアカウント以上でないと見ることができません。

    Web Transaction
    Database
    Transaction Traces
    Errors

    取得したデータには、ノート(コメント)が書け、それを共有することができます。

    まとめ
    FiveRuns TuneUpでは、RailsアプリのMVC毎に何ms時間が掛かっているか棒グラフで表示する非常にシンプルな機能だったのですが、New Relicは(というよりFreeアカウントでは)そこまでは提供されないようです。 Ruby全体のレスポンス、ホスト毎のCPU使用率、メモリ使用量やApdexスコアにより、FiveRunsより大きな粒度でアプリケーションの性能を確認できます。

    注意すべき点としては、動作環境がproductionかつ1分おきにデータを取得するので、Amazon EC2など従量課金の場合でトラフィックが多いアプリケーションの場合はデータ転送量に注意が必要です。

    Railsアプリは遅いと諦める前に、どこがボトルネックなのかを見える化し、チューニングを施す。これらを簡単に行えるツールは今後も需要があるのではないでしょうか。

  • 2008/05/12 21:10

    プロジェクト管理ツール Redmine

    フリーで使えるBTS(バグトラッキングツール)を導入しようと思い情報収集していたところ、
    Tracより良さげなRedmineにたどり着きました。
    Tracと比較してのメリットは、こちらに詳しく掲載されています。
    ということで、今回はRedmineインストールの顛末記です。

    Tracと比較して個人的にメリットを感じたのは、

    複数プロジェクトを管理できる
    デフォルトで日本語対応している
    ガントチャートが使える
    RailsアプリでPassenger(mod_rails)に対応(v0.7より)

    の4つです。Tracはプロジェクト毎に公開ディレクトリを作成してApacheのhttpd.confを書き換えたりしなければならないのに対し、Redmineは一度設置すればあとは画面上でプロジェクトを作成できます。

    また、プロジェクト毎に担当者を設定できるので、社外開発者に解放しても心配ありません。

    最後のPassenger対応については、mongrelサーバで動かすよりも実際簡単でした。インストール方法も公式ページに詳細が掲載されています。

    ■メール通知をGmailのsmtpサーバを利用するようにカスタマイズ
    Gmailのsmtpを利用するには、RailsにTLSプラグインを入れなければなりません。
    # gem install tlsmail

    そして、Redmineの config/environment.rbの最後に以下の2行を追加します。
    require “tlsmail”
    Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)

    これで送信することができました。

    ■Subversionリポジトリと連携
    Redmineが動作しているサーバに、Subversionリポジトリがあるので連携させようと思ったのですが、ここでハマりました。どのように設定しても、「リポジトリに、エントリ/リビジョンが存在しません。」というエラーが表示されます。

    同一サーバ上にリポジトリが存在するので、URLは「file:///リポジトリへのパス」と指定すればいいはずなのですが、一向にうまくいきません。。その他スキーム(http://, svn://)も試したのですがダメでした。

    エラーログは下記の通り。
    You have a nil object when you didn’t expect it!
    You might have expected an instance of ActiveRecord::Base.
    The error occurred while evaluating nil.[]

    エラーが出ている箇所のソースは以下の22行目です。
    $REDMINE_HOME/lib/redmine/scm/adapters/subversion_adapter.rb

    # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
    require ‘redmine/scm/adapters/abstract_adapter’
    require ‘rexml/document’
    module Redmine
    module Scm
    module Adapters
    class SubversionAdapter < AbstractAdapter
    # SVN executable name
    SVN_BIN = "svn"
    # Get info [...]

  • 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が一番手軽そうですが、信頼性についてはまだまだ未知数です。