アーカイブ - 11月, 2011



2011年 11月 28

MojoliciousアプリケーションをCGIで動かす時に、スタイルシートや外部JavaScriptファイル、画像など静的ファイルの扱いには注意が必要になる。

これはテンプレートでタグヘルパーを使った時、例えば

    <%= stylesheet '/css/style.css' %>

とスタイルシートを読み込んだつもりだけど、これはスタイルシートを読み込むCGIを実行するのと同じ(スタイルシートのURLにリダイレクト処理するCGIとして実行される)
静的ファイルを呼び出す回数分のCGIが実行されることになるので、パフォーマンスも悪くなることは当然ながら、データベースの接続処理をstartup内でしていたりすると実行回数分の接続を行う事となる。

以前speedyCGIとしてMojoliciousアプリケーションを動作させていた時に、MySQLの最大同時接続数が異常になってMySQLサーバがダウンした事もある。

MojoliciousでCSSなどの静的ファイルを利用する – サンプルコードによるPerl入門

 ローカル環境で試験をするときは、組み込みのWebサーバーがCSSなどの静的ファイルをディスパッチしてくれるので、パフォーマンスの問題は起こりません。一方さくらのレンタルサーバーではCGIというプロトコルを利用してWebアプリケーションを起動しています。CGIというプロトコルはひとつのアクセスに対してひとつのプロセスを立ち上げます。プロセスの起動という処理はとても時間がかかるので、静的ファイルをCGIでディスパッチするとパフォーマンスの劣化が顕著に見られることになります。

リンク先にあるように、組み込みのwebサーバやその他のプリフォークサーバ(starman等)ならば問題ないのかもしれない。まぁ、それ自体がwebサーバとして動作するものなので当然といえば当然か。

CGIとして動作させる場合の解決策としてmod_rewriteの利用が提唱されている。.httaccess(またはhttpd.conf)でApacheが静的ファイルは静的ファイルとして処理するようにmod_rewriteルールを設定する。

もう一つ解決する方法としては、タグヘルパーを使わずに

    <link href="/css/style.css" media="screen" rel="stylesheet" type="text/css" />

などと直接タグを書いてしまう方法。これはデプロイするときにディレクトリ構成が変わったりすると後々面倒(テンプレートをすべて修正する必要があるとか)なので、推奨される方法ではないのかもしれないけれど。

MojoliciousをCGI動作させていてパフォーマンスがイマイチだな・・・と思っているなら調べてみるといいかもしれない。

App.pmとかのstartup()内に

sub startup {
    warn 'warn CGI run.';
    ....
}

等としてアプルケーションを実行するとapacheのエラーログに記録されるので1度の実行で複数行のログが残っていたらその行数分アプリケーションが実行されていることになる。

Apacheでデプロイする様々な方法

Apache deployment – GitHub
Apache/CGI にmod_rewriteの設定が記述されている。その中の Pretty “Web 2.0” URLs という項目は参考になる。


Filed under: Mojolicious

Trackback Uri






2011年 11月 22

Apatana Studioで何かのプラグインを追加したあたりから起動時に以下のようなエラーが出るようになった。

111121-0002

エラー内容:”Sending Ping…” 中に内部エラーが発生しました。
org/apache/derby/iapi/error/ShutdownException

ググッてみると、Apatana Usage をオフにするといいような発言があったので試してみる。
初期設定>一般>開始およびシャットダウン

111121-0003

Aptanaを再起動してみるもエラーが出る。

で、すべてのチェックを外して起動してみた。
エラーは出なくなった。かわりに初期設定が出来なくなった…orz。

結局クリーンインストール。
日本語化、テーマ変更(Eclipse Color Themes)、EPICをインストルしただけの状態の起動項目を記録しておく。
aptana初期 起動項目


Filed under: Mac,開発環境

Trackback Uri