AppFog: PaaS for Public and Private Clouds使える言語も結構多くて
Fast and Easy Select name, size and stack, then launch. Make your apps even more powerful with popul...
https://www.appfog.com/
いろいろ使えるし、デプロイ先も選べる。AWS とか無料で使わせて貰えてチョーすげー。
Java は Jetty じゃなく Tomcat で動いてるらしかったので、clojure 使ってみようと試してみた。
$ lein new hello
で新しいプロジェクト作って Tomcat 向けに WEB-INF を作る。
| project.clj
|
+--- src
| |
| `--- hello
| core.clj
|
`--- WEB-INF
web.xml
project.clj を以下の様に弄る。
(defproject hello "1.0.0-SNAPSHOT"
:description "FIXME: write"
:dependencies [[org.clojure/clojure "1.3.0"]
[compojure "0.6.5"]
[ring/ring-jetty-adapter "0.3.11"]]
:compile-path "WEB-INF/classes"
:library-path "WEB-INF/lib"
:namespaces [hello.core])
lein deps した際にに WEB-INF/lib に jar を、クラスファイルを WEB-INF/classes に放り込んで欲しいので compile-path と library-path を変える。Tomcat なので web.xml を用意する。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="hello"
version="2.5">
<display-name>hello servlet</display-name>
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>hello.core</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
ここまで出来たらもコードを書く。例えば src/hello/core.clj を以下の様に書く。
(ns hello.core
(:import (java.util Date))
(:gen-class :extends javax.servlet.http.HttpServlet)
(:use compojure.core
ring.util.servlet)
(:require [compojure.route :as route]))
(defroutes hello
(GET "/" [] (str "
<!DOCTYPE html>
<html lang=\"ja\">
<head>
<meta charset=\"UTF-8\">
<title></title>
</head>
<body>
こんにちわ 世界 " (Date.) "
</body>
</html>"))
(route/not-found "DanKogai not found"))
(defservice hello)
サーブレットを継承して compojure でルーティングする簡単なやつ。この状態まで来たら動かす準備に入る。AppFog 用のツールを入れる。
$ gem install af
最近、クラウド操作で ruby 使ってる物、かなり多いですね。入れたら AppFog でアカウントを作って、Java を選び、デプロイ先を選ぶ。無料なので遠慮せずに好きな所に入れればいいです。ドメイン名が気に入らない人は変更出来るので好きなようにどうぞ。最後にプロジェクトのルートで
$ af update myapp
(myapp は AppFog で登録したアプリケーション名)とやればアップロードされ、アプリケーションが起動します。