dotcloudでサクっとpython/flask/mongodbデプロイ

久しぶりに楽しそうなのがあったので更新です。
dotcloudというherokuの色々な言語版みたいなもんです。DBまで色々使えます。
private beta中みたいです。登録しとけばそのうちメールくると思います。

DotCloud

試しにpython、flaskで動かしてみました。

[bash]
mkvirtualenv –python=/opt/local/bin/python2.7 py27dev
pip install dotcloud
dotcloud
# (API Key入力)
dotcloud create plansettest
dotcloud deploy -t python plansettest.www

# flaskでお試し作成
mkdir plansettest
cd plansettest
pip install flask
vi wsgi.py
pip freeze > requirements.txt

dotcloud push plansettest.www .
[/bash]

wsgi.py
[python]
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
return "Hello World!"

if __name__ == "__main__":
app.run()

application = app
[/python]

これで http://www.plansettest.dotcloud.com/ デプロイ完了。動いてくれます。
らくちんー!

ついでにmongodbも。

[bash]
dotcloud deploy -t mongodb plansettest.mongo
dotcloud info plansettest.mongo
# config: mongodb_password: のパスワードをコピる。
# あと、サーバー名とポートもあるのでメモっとく。mongodb://root:なんちゃら〜の方ね。
dotcloud run plansettest.mongo mongo
# 3回くらい失敗?した。シェルになるまでがんばる。
> use test
> db.getSisterDB("admin").auth("root", "コピったパスワード");
> db.message.save({"message":"uho"});
> db.message.find()
> db.addUser("username","password");
> exit

pip install pymongo
pip freeze > requirements.txt
vi wsgi.py
[/bash]

wsgi.py
[python]
from flask import Flask, g, abort, redirect, url_for
app = Flask(__name__)

from pymongo import Connection

def connect_db():
try:
connection = Connection("mongo.plansettest.dotcloud.com", 6477)
return connection["test"]
except:
return None

@app.before_request
def before_request():
g.db = connect_db() or abort(500)
g.db.authenticate("username", "password")

@app.route("/")
def hello():
messages = ""
for item in g.db.message.find(limit=10):
messages += item["message"] + "n"
return "Hello World!" + "n" + messages

@app.route("/say/<message>")
def say(message=""):
g.db.message.save({"message": message})
return redirect(url_for("hello"))

if __name__ == "__main__":
app.run()

application = app

[/python]

これでmongodbを使って簡単にデプロイー!