heroku.com
herokuというrailsアプリケーションのホスティングサービスを使ってみました。以前はブラウザでrailsアプリが開発できる、ということでしたが、今はheroku gardenという名前になっています。ブラウザを使った開発も面白そうですが、まずはheroku.comを使ってみます。
heroku.comを使用する場合は、自分の環境でrailsアプリを作成したものをgit pushすると、herokuにdeployされます。料金はストレージと通信料、そして各種オプションで決まるようです。ストレージ5Mで通信がほとんど無ければfreeなので、その範囲内で試してみます。
まずはherokuをインストール。
$ gem install heroku
gitのremoteリポジトリを使用する為に、公開鍵をアップします。
$ heroku keys:add
railsアプリを作成し、git commitまでします。
$ rails foobar $ cd foobar $ git init && git add . && git commit -m "first commit"
heroku側にアプリケーションのdeploy先を作成します。
$ heroku create
createの後にアプリケーション名を入れないと、変な名前(今回はhollow-ice-37でした)を付けられてしまいます。ちょっと嫌なのでやり直し。
$ heroku destroy hollow-ice-37 $ heroku create foobar(実際はアプリの名前) $ git push heroku master
git pushすると、自動的にdeployされます。deployされたアプリケーションをブラウザで確認したところ、
Missing the Rails 2.1.1 gem. Please `gem install -v=2.1.1 rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.
と。config/environment.rbの「RAILS_GEM_VERSION」をコメントアウトし、再度git pushしたところ、railsのデフォルトの画面が表示されました。
これだけだとよく分からないので、ローカルでscaffoldして、herokuにアップしてみます。
$ script/generate scaffold task name:string start:datetime end:datetime owner:integer $ rake db:migrate $ script/server
普通に動くことを確認し、git push。ただ、これだけだとdeploy先でdb:migrateが実行されないらしく、ブラウザで確認するとエラーが出てました。
deployされたアプリケーションのログを見る為には、heroku logsを実行します。
$ heroku logs ==> log/production.log <== # Logfile created on Thu Jun 18 11:14:08 -0700 2009 Processing TasksController#index (for 59.156.119.10 at 2009-06-18 11:14:17) [GET] ActiveRecord::StatementInvalid (PGError: ERROR: relation "tasks" does not exist : SELECT * FROM "tasks" ): app/controllers/tasks_controller.rb:5:in `index' /home/heroku_rack/lib/static_assets.rb:9:in `call' /home/heroku_rack/lib/last_access.rb:15:in `call' thin (1.0.1) lib/thin/connection.rb:80:in `pre_process' thin (1.0.1) lib/thin/connection.rb:78:in `catch' thin (1.0.1) lib/thin/connection.rb:78:in `pre_process' thin (1.0.1) lib/thin/connection.rb:57:in `process' thin (1.0.1) lib/thin/connection.rb:42:in `receive_data' eventmachine (0.12.6) lib/eventmachine.rb:240:in `run_machine' eventmachine (0.12.6) lib/eventmachine.rb:240:in `run' thin (1.0.1) lib/thin/backends/base.rb:57:in `start' thin (1.0.1) lib/thin/server.rb:150:in `start' thin (1.0.1) lib/thin/controllers/controller.rb:80:in `start' thin (1.0.1) lib/thin/runner.rb:173:in `send' thin (1.0.1) lib/thin/runner.rb:173:in `run_command' thin (1.0.1) lib/thin/runner.rb:139:in `run!' thin (1.0.1) bin/thin:6 /usr/local/bin/thin:19:in `load' /usr/local/bin/thin:19
PGError…。どうやらPostgreSQLを使っているようです。
deploy先でrakeを実行したい場合はheroku rakeコマンドを使います。
$ heroku rake db:migrate
これでscaffoldした内容を確認できました。