いまさら聞けないRuby on Railsとherokuでつくるシンプルなタスク管理ツール #2

2012.11.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

前回の記事でシンプルなタスク管理ツールは作成できましたでしょうか。今回はそれをherokuで動かせるようにしてみます。

はじめに

herokuはRuby、Java、Clojure、Java、Python、Node.js、Scalaなどの複数言語に対応したPaaSです。gitとheroku toolbeltを利用してローカルから幾つかコマンドを打つだけでアプリケーションをデプロイできます。ベーシックなプランは無料で利用できますし、無料のアドオンが多数用意されていますのでサーバ管理を気にしなくとも柔軟な開発が出来ます。
利用にはherokuのアカウント作成heroku toolbeltをインストールする必要があります。

heroku上でアプリを作成する

heroku toolbeltをインストール出来たらrailsアプリのディレクトリへ移動して以下のコマンドを実行してください。

$ heroku create my-simple-todos
Creating my-simple-todos... done, stack is cedar
http://my-simple-todos.herokuapp.com/ | git@heroku.com:my-simple-todos.git
Git remote heroku added

作成できました。既にgitリポジトリが存在していたので自動で heroku というリモートリポジトリも追加されています。
もしgit initをする前にheroku createをしてしまっても git@heroku:[app name].git でリポジトリに追加すれば大丈夫です。例えば以下のように。

$ git remote add heroku git@heroku:my-simple-todos.git

herokuにデプロイする

デプロイは基本herokuのリポジトリにpushするだけです。そうするとリモートでおそらくpost-receiveフックが設定されていてアプリのコードの更新等をしてくれます。
今回の場合はherokuという名前でリモートが設定されているので以下のようにします

$ git push heroku master

きっとrailsアプリであることを認識してbundle install、rake assets:precompile、サーバーの起動などを実行してくれると思います。
しかしまだDBのmigrationは実行されていないのでテーブルを追加or更新した場合は以下を実行してください。

$ heroku run rake db:migrate

heroku上のアプリに対してrakeタスクを実行するときはheroku runコマンドを使用します。

これでアプリの実行環境が整いました。ブラウザでURLを直打ちしてもいいですが便利なコマンドも用意されています。

$ heroku open

トップページを変更する

おそらくデフォルトのWelcome aboardが表示されたと思います。/tasksに移動して動作を確認してみてください。きちんと動作したでしょうか。
トップページを開いてもいちいち/tasksに移動しなくてはいけないのは面倒ですよね。なので以下のように修正しておきます。

config/routes.rb

MySimpleTodos::Application.routes.draw do
  root :to => 'tasks#index'

  resources :tasks do
    resource :finish, only: [:create, :destroy], module: :tasks
  end

routes.rbにこの様に記述を追加するとルートパスに TasksControllerindex アクションを紐付けることができます。
しかしこのままでは public/index.html(Welcome aboard) が優先されてしまうので削除しておいてください。

修正が終わったらgit commitして再度herokuにpushしてください。
今度はmigrationを実行する必要はありません。ブラウザでトップページを開くと/tasksと同じ内容が見られると思います。

herokuのログを見る

ページにアクセスしてもエラーメッセージしか返ってこない場合はherokuのログを確認してみてください。

$ heroku logs

デフォルトでは直近の100行が返ってきます。もっと遡りたい場合は --num オプション(省略形は-n)で行数を指定できます。

$ heroku logs --num 500

メンテナンス状態にする

DBのテーブル追加等でデプロイが終わるまでメンテ状態にしておきたいなんてことも簡単にできちゃいます。

$ heroku maintenance:on
Enabling maintenance mode for my-simple-todos... done

戻すのはこちら

$ heroku maintenance:off
Disabling maintenance mode for my-simple-todos... done

メンテナンス画面はAmazon S3に静的なhtmlを置けばカスタマイズできるようになります。htmlのURLはwebの管理画面か以下のコマンドでも設定できます。

$ heroku config:add MAINTENANCE_PAGE_URL=http://s3.amazonaws.com/bucket-name/maintenance.html

まとめ

他にもherokuコマンドで設定できるものはたくさんありますが今回は割愛させて頂きます。
herokuをproduction環境で使おうとしてそれなりのスペックにすると個人では結構負担がありますが、無料で手早くrailsアプリをデプロイ出来るのはかなり魅力が大きいと思います。是非試してみてください。