Rails無料PaaS「Heroku」を使ってWEBアプリを公開してみた
GAEなどもまだRubyでのサービスを開始していないが、ずいぶん前にブラウザでRailsアプリが構築できるといって話題になったHerokuが、これもまたずいぶん前に本格的にRailsのPaaSを始めていたらしいので今更ながら環境作りにトライしてみた。
■Heroku
http://heroku.com/
Ruby専用だけあってかサービスのプランもBlossom(桜)、Koi(鯉)、Ronin(浪人)、Fugu(河豚)、Zilla(ゴジラ)と日本由来(?)の名称となっている。(なんでSakuraじゃないのか?なぜSamuraiではなくRoninなのかはちょっと疑問だが・・・)
Herokuの特徴は以下のとおり
・Rails 1.2.x, 2.x and 3.0.0betaをサポート
・DBはPostgreSQL(無料版での全体の容量5MB)
・MySQLもオプションで可能(AmazonRDSとの連携のみ)
・データバックアップ(世代バックアップは有料)
・デイリーのCron利用可能(デイリー以下の周期は有料)
・SSLも可(独自ドメイン等にする場合は有料)
・CouchDBとMongoDBもアドオンで利用可
・全文検索はSolrをサポート
・Memcachedもサポート
・大量メール送信も可能
・そのほかにもアドオンが用意されている
など機能も満載で商用利用でも問題なさそうです。
※ちなみ共同購入クーポンの「ミナワリ」もHeokuを使って構築しているとか。http://www.publickey1.jp/blog/10/rorpaasheroku.html
■ミナワリ
http://www.minawari.jp/
では、そろそろ本題に・・・
Documentを見る限り以下のように
・gemでherokuコマンドツールをインストール
・heroku createでアプリを作成
・Gitでソースをアップロード
という感じで構築できるらしい。
ここではタイトルと本文を登録する程度の簡単なノートアプリを作ってみた。
■ユーザ登録する
http://api.heroku.com/signup
■Gitをインストール
以下からGitをインストール
Windows: http://code.google.com/p/msysgit/
Mac: http://help.github.com/mac-git-installation/
■gemでHerokuのコマンドツールをインストール
$ gem install heroku
■Railsのプロジェクトを作成(ローカル)
$ rails mynote -d postgresql
※Heroku側がPostgreSQLなので"-d postgresql"を付けてみたがなくても問題なさそう。
■共有リポジトリを作成
cd mynote $ git init $ git add . $ git commit -m "new app"
■SSHKeyを作成
Gitで接続する際にSSHKeyが必要なので作成する
メモ:ここでPuTTYgen.exeを使ってキーを作ってみたものの、アップロードすると「Fingerprint can't be blank」など以降の工程でエラーになって進めなかった。いろいろググッていたら、Windowsの場合、「GitBash.exe」の中にssh-keygenコマンドがあり以下のコマンドでキーを作ったらうまくいった。
$ ssh-keygen -C (Herokuに登録したメールアドレス) -t rsa
■「heroku create」でアプリを作成
heroku create Enter your Heroku credentials. Email: (Herokuに登録したメールアドレス) Password: Uploading ssh public key C:\Documents and Settings\Owner/.ssh/id_rsa.pub Creating hollow-sword-87..... done Created http://hollow-sword-87.heroku.com/ | git@heroku.com:hollow-sword-87.git Git remote heroku added
上記のように「heroku create (何も指定しない)」とすると、自動的にhollow-sword-87のようにランダムなアプリ名が割り当てられ、そのままドメインとされる。hollow-sword-87.heroku.com
「heroku create hogehoge」と指定すると、hogehoge.heroku.comとなる。
アプリ名は管理画面からでも変更可能。
管理画面にログインするとすでに作成されたアプリが表示されている。
■「git push」でローカルのソースをアップロード
$ git push heroku master
http://xxxx.heroku.com/ にアクセスしてpublic/index.htmlが表示された。
■次にDB接続を確認するためメモ機能をscaffoldで作成してみた
$ ruby script\generate scaffold note subject:string body:text exists app/models/ exists app/controllers/ exists app/helpers/ create app/views/notes exists app/views/layouts/ exists test/functional/ exists test/unit/ [f:id:nzm_o:20100811024308j:image] create test/unit/helpers/ exists public/stylesheets/ create app/views/notes/index.html.erb create app/views/notes/show.html.erb create app/views/notes/new.html.erb create app/views/notes/edit.html.erb create app/views/layouts/notes.html.erb create public/stylesheets/scaffold.css create app/controllers/notes_controller.rb create test/functional/notes_controller_test.rb create app/helpers/notes_helper.rb create test/unit/helpers/notes_helper_test.rb route map.resources :notes dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/note.rb create test/unit/note_test.rb create test/fixtures/notes.yml create db/migrate create db/migrate/20100809091958_create_notes.rb
■scaffoldでされたソースを再びアップロード
$ git add . $ git commit -m 'add new sources' $ git push heroku master
■heroku rakeコマンドにてテーブルを作成
$ heroku rake db:migrate (in /disk1/home/slugs/255381_50716a9_55a7/mnt) == CreateNotes: migrating ==================================================== -- create_table(:notes) -> 0.1196s == CreateNotes: migrated (0.1197s) ===========================================
※database.ymlは特に編集していなかったのだが問題なくmigrateできた。ここら辺の仕組みは別途調べようと思う。
http://xxxx.heroku.com/notes にアクセスして登録/変更/削除してみたが、問題なく動作した。
有料版はGAEに比べて若干高いが、開発合宿などでアプリを作ってサクッと公開したり、DBに付加をかけないマッシュアップ系アプリを公開したり、無料の範囲でもだいぶ利用価値が高いかもしれない。
今後、アドイン機能も少しずつ試していこうと思う。
簡潔でわかりやすい
網羅的でGit初心者にはお勧め