4月13日にサインアップ申請をしておいた Cloud Foundry から「準備できたよー」のメールが届いたので、さっそく触ってみました。今なら、サインアップから10日くらいで使えるようになるってことでしょうかね。
The industry’s first open platform as a service. Run your Spring, Rails and Node.js applications. Deploy from your IDE or command line.
今回は Rails アプリ、Sinatra アプリ、Node アプリのデプロイを試してみました。ソースコード一式を GitHub においてあります。
june29/cloudfoundry-samples – GitHub
(写真は本文と関係ありません。手に入って嬉しかったので載せました)
準備
コマンドラインのクライアントを gem でインストールしました。
$ gem install vmc $ vmc -v vmc 0.3.10
Rails アプリ
普通に Rails アプリをつくって、プロジェクトのディレクトリで vmc push を実行します。
$ vmc push Would you like to deploy from the current directory? [Yn]: Y Application Name: sample29rails Application Deployed URL: 'sample29rails.cloudfoundry.com'? Detected a Rails Application, is this correct? [Yn]: Y Memory Reservation [Default:256M] (64M, 128M, 256M, 512M or 1G) 64M Creating Application: OK Would you like to bind any services to 'sample29rails'? [yN]: N Uploading Application: Checking for available resources: OK Processing resources: OK Packing application: OK Uploading (15K): OK Push Status: OK Staging Application: OK Starting Application: OK
scaffold だけでつくったアプリをデプロイしてあります。普通にデータベースに書き込めている感じ。
http://sample29rails.cloudfoundry.com/
Sinatra アプリ
app.rb を書いただけ。これだけで vmc push したら動きました。
$ vmc push Would you like to deploy from the current directory? [Yn]: Y Application Name: sample29sinatra Application Deployed URL: 'sample29sinatra.cloudfoundry.com'? Detected a Sinatra Application, is this correct? [Yn]: Y Memory Reservation [Default:128M] (64M, 128M, 256M, 512M or 1G) 64M Creating Application: OK Would you like to bind any services to 'sample29sinatra'? [yN]: N Uploading Application: Checking for available resources: OK Packing application: OK Uploading (0K): OK Push Status: OK Staging Application: OK Starting Application: OK
http://sample29sinatra.cloudfoundry.com/
Node アプリ
ファイル名は app.js にしておく必要があると書いてあったのでそうしてみたら動きました。express を使ってみたので、package.json を書かなきゃいけなくて、npm bundle も実行しておかなきゃいけない。
参考にしたのは Deploying a Node.JS app with NPM dependencies : Cloud Foundry Community です。
$ vmc push Would you like to deploy from the current directory? [Yn]: Y Application Name: sample29node Application Deployed URL: 'sample29node.cloudfoundry.com'? Detected a Node.js Application, is this correct? [Yn]: Y Memory Reservation [Default:64M] (64M, 128M, 256M, 512M or 1G) 64M Creating Application: OK Would you like to bind any services to 'sample29node'? [yN]: N Uploading Application: Checking for available resources: OK Processing resources: OK Packing application: OK Uploading (123K): OK Push Status: OK Staging Application: OK Starting Application: OK
http://sample29node.cloudfoundry.com/
おまけ
Heroku の heroku コマンドと同じ感覚で適当にコマンドを打ったら通るので面白かったです。
デプロイしたアプリの一覧を見るときは vmc list でした。
$ vmc list +-----------------+----+---------+----------------------------------+----------+ | Application | # | Health | URLS | Services | +-----------------+----+---------+----------------------------------+----------+ | sample29sinatra | 1 | RUNNING | sample29sinatra.cloudfoundry.com | | | sample29node | 1 | RUNNING | sample29node.cloudfoundry.com | | | sample29rails | 1 | RUNNING | sample29rails.cloudfoundry.com | | +-----------------+----+---------+----------------------------------+----------+
デプロイしたアプリを削除するときは vmc delete です。
$ vmc delete #{app_name}
あとあと、vmc push したけど「何のアプリケーションか分からなかったよ」ってときは、以下のようになります。
$ vmc push Would you like to deploy from the current directory? [Yn]: Y Application Name: sample29 Application Deployed URL: 'sample29.cloudfoundry.com'? [WARNING] Can't determine the Application Type. Select Application Type: (Rails, Spring, Grails, Roo, JavaWeb, Sinatra or Node)
内部では、どのようにアプリケーションを判別しているのでしょうね。ちょっと興味があります。
まとめ
「Heroku さんが息をしていないから…」というわけでもないのですが、Web アプリのホスティング先として Heroku 以外の選択肢があってもいいですよね。Google App Engine も視界にはありつつあんまり手が伸びていなくて、Cloud Foundry は「Rails も Sinatra も最初から動くよ」と謳っていたので勢いで触ってみました。Node アプリが動くという意味では Joyent に並ぶ選択肢にもなるので嬉しいですね。
Heroku の場合は「ああ、git で push すればいいのか」だったのが、Cloud Foundry の vmc コマンドは、独自に覚えることが多くなりそうです。パッと触ってみたところでは「よく分かっていないけれど動かせている」感じで、もうちょっと踏み込んだことをしようと思ったら、色々と調べる必要が出てきそうです。
今後もちょこちょこ触ってみようと思いました!おしまい。
もっとちゃんと説明してあるエントリを見つけたのでリンクしておきます!