tyoshikawa1106のブログ

- Force.com Developer Blog -

Rails:Herokuへのデプロイを試してみました

Railsチュートリアルの第一章のラストです。Herokuへのデプロイについて試してみました。

railstutorial.jp

Herokuのセットアップ

HerokuではPostgreSQLデータベースを使用します (ちなみに発音は “post-gres-cue-ell” で、よく“Postgres”と略されます)。そのためには、本番 (production) 環境にpg gemをインストールしてRailsがPostgreSQLと通信できるようにします。

group :production do
  gem 'pg', '0.15.1'
  gem 'rails_12factor', '0.0.2'
end


アプリケーションが前提としているRubyのバージョンを明示的に指定するといいみたいです。

ruby '2.0.0'
#ruby-gemset=railstutorial_rails_4_0


チュートリアルで紹介されていたGemfileの内容はこちら


group :production doの部分が追加されています。
f:id:tyoshikawa1106:20150714043502p:plain


インストールの際には、bundle installに特殊なフラグを追加します。

$ bundle install --without production

f:id:tyoshikawa1106:20150714043832p:plain

    • without productionオプションを追加すると、 本番用のgem (この場合はpgとrails_12factor) はローカルの環境にはインストールされません (Bundlerでreadlineエラーが発生した場合は、Gemfileにgem ’rb-readline’を追加してください)。


上で追加したgemは本番環境のみで使用するためのものなので、このコマンドを今実行してもgemはローカルに追加されません。このコマンドを実行するのは、後の本番環境に備えてGemfile.lockを更新し、pg gemとrails_12factor gem、Rubyバージョンの指定を含めておく必要があるためです。以下を実行して変更をコミットできます。

$ git commit -a -m "Update Gemfile.lock for Heroku"

f:id:tyoshikawa1106:20150714043940p:plain


続いてHerokuコマンドで作業を進めていきます。まずはheroku loginコマンドでHerokuにログインします。ユーザ名とパスワードを入力すればOKです。

$ heroku login


続いてheroku createコマンドでHerokuに新しいアプリを作成します。

$ heroku create

f:id:tyoshikawa1106:20150714044438p:plain


この時点では外枠のみ作成されています。
f:id:tyoshikawa1106:20150714044624p:plain


次のコマンドでHerokuにアプリをデプロイします。

$ git push heroku master

f:id:tyoshikawa1106:20150714044937p:plain


これでHerokuへのデプロイが完了です。
f:id:tyoshikawa1106:20150714045047p:plain


Herokuダッシュボードの右上にあるメニューからアプリにアクセスできます。
f:id:tyoshikawa1106:20150714045140p:plain


もしくは次のコマンドでもどうようにアクセスできます。

$ heroku open


このような画面が表示されると思います。
f:id:tyoshikawa1106:20150714045322p:plain


Rails 4.0のデフォルトページはHerokuでは表示できないため、エラーページが表示されるみたいです。実際に作成したアプリをデプロイすれば正しく表示されるとのことです。これでRailsアプリをHerokuにデプロイする方法まで確認することができました。

Herokuコマンドの紹介

Herokuアプリの名前変更は次のコマンドで実行できます。

$ heroku rename <<変更後のアプリ名>>


無事にRailsチュートリアルの第一章が完了しました。開発環境の設定、バージョン管理、本番環境へのデプロイについて確認できました。