• GAEアプリケーションを HRDに移行

    移行といっても「GAEに移行した」のとおり、static contentをservletで公開しているだけなのでdashboardのdeprecate警告を消したかっただけ。

    Master/Slave から HRD への移行にあるようにM/Sなアプリケーションを複製し、HRDなアプリケーションを作成。
    DataStoreを使ってないのでMigration Toolを実行することもなし。
    ついでにApp Engine SDKを最新化したら、appengine-web.xmlに<threadsafe>指定が必須になってたらしく追記。

    参考:appengine-web.xml does not contain a <threadsafe> element

    独自ドメインで公開しているアプリケーションをどうやって設定するのか忘れてしまっていた。

    GAEアプリケーションは、http://some-appid.appspot.comという感じのURLで公開される。
    (2年前の話なので今も同じかわからないが)独自ドメインで公開する場合は、そのドメインでGoogle Appsを利用できるようにしておいて、Google Appsから利用するサービスとして登録する。

    このサイトの場合、

    1. breeze.ccドメインのDNSに、ghs.google.comを指すCNAMEレコードとしてpassing.breeze.ccを登録する(ここの場合、既に登録済)
    2. GAEのダッシュボードから、移行後アプリケーションのApplication Settings→Domain Setup→Add Domainでドメイン名追加(ここならbreeze.cc)
    3. Google Appsのダッシュボードから、設定→「(移行前アプリケーション) の設定」で、http://passing.breeze.cc/を削除
    4. 同様に「(移行後アプリケーション)の設定」で、http://passing.breeze.cc/を追加

    という感じ。

  • GAEに移行した

    すっきりわかるGoogle App Engine for Javaクラウドプログラミング


    オープンソース徹底活用 Slim3 on Google App Engine for Java
    今年の夏は暑かったせいか、このブログをホストしているサーバが時々ハングしていた。
    ので、なんとなく思い立ってGoogle App Engineに移行した。

    ほぼ静的htmlしか公開していないサイトなので、静的ファイルのみのアプリケーションをGAEでホストするというゴージャス仕様。

    短時間でなんとかしたいなと考え、まずは以下のように。

    • MTはperlで書かれているけど、これをGAE上で動くようにするのは道のりが遠いので、コメント/トラックバックの機能は閉じることにする。
      • MTの管理画面で両者を無効にして、サイト全体を再構築。
    • GAEアプリケーションのwar/ディレクトリ配下に公開する静的ファイルを全部置く。
    • デプロイする。
    GAEのアカウントとったりアプリケーション登録したりと、こまごまやることはあったけど、静的ファイルを公開するだけならこれでおしまい。

    ・・・なのだけどハマったことがいくつか。

    • 静的ファイル数の制限が3000個。
      • cgiやライブラリを除くMTのファイル(画像やテーマなど)もまとめてデプロイしようとしたのだけど、ファイル数制限を超えてデプロイできなかった。使ってないファイルを調べてちまちま削除した。
    • ファイル数が多かったのでデプロイに妙に時間がかかった。
      • ftpやscpでアップロードするのとは状況が違い、単純にファイルとして格納されるわけではないそうで。自分ところではデプロイ開始から50分かかってしまった。

    毎回デプロイに一時間近くかかってはこまるよなぁ、と。
    ということで現在は以下のように変更。

    • 対象となる静的ファイルを、pathのハッシュを基準にいくつかのzipアーカイブに分割して保存。(現在は16分割している)
    • すべてのURLを受け付けるサーブレットを作成。
    • リクエストされたパスからハッシュ値をとって格納zipアーカイブを決定。
    • zipアーカイブから指定されたパスのリソースを取り出して応答。
    • 静的コンテンツ1つ1つを、毎アクセスごとにzipから読み込んではさすがに無駄があるので、キャッシュAPIを使う。
    てなことをしたら、デプロイも数十秒で収まるようになった。

    アプリケーションが自分でOpenするファイルは、リソースファイルとしてデプロイしておく必要がある。

    ここのサイト用アプリは次のようなディレクトリ構成になっていて、

    gae-static-content/
      src/
        サーブレットなどのソース
      war/
        static-contents/
          passing-static-0.zip
          passing-static-1.zip
          passing-static-2.zip
          passing-static-4.zip以下 -f.zipの16分割。
        WEB-INF/
          classes/
          lib/
          appengine-web.xml
          logging.properties
          web.xml

    war/static-contens/*.zipをリソースファイルとしてデプロイするために、appengine-web.xmlに以下のように指定している。デフォルトではstatic-fileとリソースファイルの両方としてデプロイされるそうなので、静的ファイルからは除外、とした。

    	<static-files>
    <exclude path="/static-contents/*" />
    </static-files>

    MTで記事編集→
    再構築してhtml生成→
    静的ファイルのpathに応じて分割アーカイブ→
    アプリケーションとしてデプロイ

    てな流れ。分割アーカイブはperlで書いたスクリプトで一括処理。

    処理と作業の単純化のため、pathのハッシュ基準にzip分割しているのだけど、ファイルサイズを考慮していないのでそれぞれのアーカイブがGAEのファイルサイズ制限にひっかかってしまう可能性がある。が、今のところ最も大きいzipでも3MBなので、まあいいかと思っている。


    環境:
     Windows 7
      JDK6u20
      Eclipse 3.6
     App Engine SDK 1.3.7