Clojure + Compojure on Google App Engine

プログラミングClojureを購入し、ここ数日Clojureにはまりつつあります。
JVMで動き、Javaのライブラリが使えるという実用性とそのJVM上で優雅に動く関数型言語というイメージです。Scalaも同じようにJVMで動く関数型言語ですがClojureの方がLisp側に傾いています。

で、そんなClojureをCompojureというフレームワークとともにGoogle App Engineで動かしてみようと昨日、今日試してみて成功しましたのでその手順を忘れないうちに書き留めておきます。

参考にしたのは以下のサイト
Clojure on Google App Engine

Compojureをビルドすると、Clojureを含めたライブラリの依存関係を解決してくれるので最初に取得しておきます。

Compojure

解凍先のディレクトリ内で"ant deps"と"ant"を行うと必要なライブラリ、compojure.jarが生成されます。
これらのライブラリと、その他GAE的に必要なライブラリをディレクトリにまとめ、build.xmlは以下のように編集しました。

<project name="guestbook-clj" basedir="." default="test">
  <property environment="env" />
  <property name="sdk.dir" location="/Users/tnoborio/lib/appengine-java-sdk-1.3.0" />
  <property name="classes.dir" value="war/WEB-INF/classes" />
  <property name="lib.dir" value="war/WEB-INF/lib" />
  <property name="src.dir" value="src" />
  <property name="test.dir" value="test" />
  <property name="compojure.dir" value="/Users/tnoborio/src/clojure/compojure" />
  <property name="appengine.clj.jar" value="/Users/tnoborio/src/clojure/appengine-clj.jar" />
(略...)
  <target name="copyjars">
    <copy file="${sdk.dir}/lib/user/appengine-api-1.0-sdk-1.3.0.jar" todir="${lib.dir}" />
    <copy file="${compojure.dir}/compojure.jar" todir="${lib.dir}" />
    <copy file="${appengine.clj.jar}" todir="${lib.dir}" />
    <copy todir="${lib.dir}">
      <filelist dir="${compojure.dir}/deps" files="clojure.jar clojure-contrib.jar commons-io-1.4.jar commons-codec-1.3.jar commons-fileupload-1.2.1.jar" />
    </copy>
  </target>
(略...)
</project>

アップ後、Internal Server Errorが出て途方にくれていたところ(オーバーですが)、@nitro_idiotさんからアドバイスいただきました。

@tnoborio Compojureのソースのhttp.cljの17行目(http.multipart)をコメントアウトしてビルドし直すといいかもしれないです。GAEはファイルのアップができないので、ライブラリをimportするだけでエラーになるっていう

試したところまさにそのとおりの対応で動作!ずばり的確な対処方法を教えていただけました。
まだHello Worldができただけなのでこれからですが、それなりのアプリを書いてみようと思います。

コメント

人気の投稿