RailsアプリをチューニングするならNew Relic RPM

Posted filed under Ruby on Rails.

Photo by Riverman72  あとで自分メモを書こうと思うけど、先に一言。  37signalsも使っているといううたい文句に惹かれて試してみた、Railsのパフォーマンス記録ツール/サービスNew Relic RPM(Rails Performance Management)が、すばらしい。  RPMは開発時用のDeveloperと、実機用のProductionのが二つあり、まだ開発時用のDeveloperモードしか試してはいないんだけど、専用の管理画面で、アクションを実行時のメソッド単位の実行時間、生成されるSQL、SQLの実行時間やインデックスの利用状況などが非常に簡単に把握できます。  Railsで開発している人なら、下のムービーを見れば、そのすごさが分かるはず。  RPM developerのデモ動画 | RPM production のデモ動画  いまこれを使って、PhotoShareのチューニングをしていますが、非常に快適。これは超おすすめです。  ひととおりチューニングが終わったら、RPM Productionのagentをインストールして実際に稼働しているRailsのデータを元にさらにチューニングを進められるって言うところがまたすごいなぁ。いい連携だ。  しかしこのソフトもすごいけど、Railsもこういった周辺マーケットが育ってきている事実も見逃せないなぁ。  同種のサービスでは、FiveRunsもあるし、単なるホスティングではないサービスを提供する会社が増えてきていることは、Railsが本格的にビジネスに結びついているって事なんだろうな。

BigCanvas PhotoShareリリース!

Posted filed under PhotoShare.

  中島さんと立ち上げた、Big Canvasのファーストプロダクト、Big Canvas PhotoShare (www.bcphotoshare.com)をリリースしました。AppStoreでのダウンロードは、こちらから。  このアプリケーションは、何よりも手軽に写真を使ったコミュニケーションが出来ることを目指したアプリです。  煩雑なユーザ登録などせずに、写真をサーバへアップロードし、友人や家族と共有できます。誰かを指定して写メするのと違い、自分の日常を流していくTwitterのようなユルいコミュニケーションを目指してます。  すでに取った写真をアップロードしたい場合には、右下の四角のアイコンを、その場で写真を撮りたい場合はその隣の、カメラのアイコンをクリックします。写真をアップロードするときには、「非公開」「家族と共有」「友人と共有」「全員に公開」を選んでください。  「友達と共有」とした写真を友達に見せたい場合は、メインメニューを下にずらし、「友人」や「家族」を選択し、「招待する」をクリックします。これで、メールの作成画面に移りますので、そのメールを友達に送りましょう。  招待された人が、iPhoneを持っていない場合は、Webでも写真を見ることができます。  iPhoneのアプリの日本語化はされていますが、まだWeb側の方は英語版のみになっています。Webの日本語版は近日中にリリースします。  また、この週末は過負荷により、サーバとの通信が重い可能性があります。チューニングやサーバ強化は順次行っていきますので、ゆっくり楽しんでください。

Capistranoでmigrationsする前に自動でバックアップ

Posted filed under Ruby on Rails.

Photo by mondopiccolo  Capistranoではdeployしても、前のソースが残っているために、すぐに前のバージョンに戻せますが、データベースはそうはいきません。  そこで、deploy:migrationsを実行する前に自動でDBのバックアップを取るようなタスクを探してみました。 MySQL専用ですが、これでローカルのbackupsというディレクトリに、migration実行前のダンプがダウンロードされます。

Apache(mod_rails)とmongrelでHTTPレスポンスヘッダに特定の値を返す

Posted filed under Ruby on Rails.

Photo by icanteachyouhowtodoit レスポンスコードでステータスを判断するとFreeSpotとかで問題にならない?からの続き。  ステータスコードで200が帰ってきたときに、ほんとに自分が通信したいサーバから帰ってきたかを検証する方法を考えてみました。  ほんとに相手のサーバを認証したい場合はSSLを使うべきですが、そんなに大事にしたくない場合は、HTTPレスポンスヘッダに特定の値をセットすることで、相手を特定できるのではないかと思います。  Railsのbefore_filterなどでresponse.headersをセットしてもいいのですが、これだとcacheに入った場合など、Railsを通らないときには、ヘッダが追加されません。 そのため、mod_railsの場合はApacheで、mongrelの場合はmogrel内でヘッダにセットする必要があります。  Apacheでは、Headerディレクティブでヘッダを書き換える事ができます。これを使う場合にはmod_headersを有効にしてください。 <VirtualHost *> …. Header set X-AppName sticka </VirtualHost>  mongrelの場合には、config/environment.rbに下記のコードを追加します。 if defined?(Mongrel) && defined?(Mongrel::Rails) class Mongrel::Rails::RailsHandler alias process_without_appname process def process(request, response) response.header[‘X-AppName’] = ‘sticka’ process_without_appname(request, response) end end end  これで、開発で使っているmongrelでも、実環境のApacheでもHTTPレスポンスヘッダのX-AppNameにはstickaが設定されます。  外部からAPIをアクセスする際には、X-AppNameを検証することで、プロキシなどによって勝手にリダイレクトなどをされても、それを検出することができます。