Skip to content
Takashi Hayasaka edited this page Jun 26, 2013 · 4 revisions

この記事は、Heroku上でRuby on Railsのアプリケーションをどのように実行するかについて取り上げています。HerokuとRailsの両方の知識があることを前提としています。もし、どちらか1つでも知識をお持ちで無い場合は、Rails4のクイックスタートガイド を代わりに参照して下さい。また、この記事は、ローカル環境にHeroku toolbeltがインストール済みであることを前提としています。

Railsのほとんどの機能は、Heroku上で動作しますが、Herokuのプラットフォームから一番良い結果を得るためにいくつかの設定が可能となっています。このためには、Rails4のアプリをPostgresへ接続するように設定したり、ログの出力がSTDOUTへ向くよう設定したり、本番環境でアセットが利用可能となるようアプリケーションを設定する必要があります。

ログとアセット

Herokuでは、ログをストリームとして扱い、ログがSTDOUTに送られるようにする必要があります。Rails4で、STDOUTのログ機能を有効にするには、rails_12factorのgemを追加する必要があります。また、このgemは本番環境へアセットを提供するようアプリの設定を行います。このgemを追加するには、Gemfileへ以下を追記して下さい。:

gem 'rails_12factor', group: :production

このgemは、12factorにあるようなアプリケーションへ近付けてくれます。このgemが、どのようにログやアセットを設定するかについて、より詳しく知りたい場合は、rails_12factor READMEをお読み下さい。このgemが、アプリケーションに存在していない場合、デプロイ時に警告メッセージを受けます。また、アセットとログは機能しない状態となります。

Postgres

アプリケーションは、Postgresのデータベースを使用するよう設定される必要があります。新規作成されたRails4のアプリケーションは、sqliteを使用するように設定されます。Postgresを代わりに使用するには、Gemfileへpggemを追記して下さい。:

gem 'pg'

我々は、開発環境と本番環境のどちらにも同じデータベースを使用することを推奨しています。これは、開発環境と本番環境の同等性を保つべきという思想によります。Gemfileから、sqliteのgemを削除するか、本番環境以外のグループへ記述を移動させて下さい。Herokuでsqliteを使うべきではない理由に関しては、こちらをお読み下さい。この記事では、Postgresをローカル環境に設定する方法に関してもより詳細に記載されています。

Rubyのバージョン

Rails4は、1.9.3以降のバージョンのRubyを必要とします。Herokuでは、新たにアプリケーションを作成するとデフォルトで、2.0.0がインストールされます。そのため、ここでは特別何かをする必要はありません。ですが、Gemfileへお使いのRubyバージョンを記述することを推奨します。:

ruby '2.0.0'

Rubyのバージョンを宣言することで、製品間、開発者間での環境の違いを無くすことが可能です。

Rails3アプリのアップグレード

アプリケーションをRails3からアップグレードする場合、まずは、ローカルのRails4環境でアプリケーションが動作するようにする必要があります。我々は、Rails4へのアップグレードガイドに従うことを推奨しています。アップグレードが完了しましたら、前出の各種インストラクションに従って設定を行って下さい。その後で、プロジェクト内に、binディレクトリを作成するためのコマンドを実行する必要があります。アップグレード済みのRailsアプリのルートディレクトリで、以下のコマンドを実行して下さい。:

$ rake rails:update:bin

このコマンドにより、アプリケーションのルートにbinディレクトリが作成されます。このディレクトリが、.gitignoreファイル内に存在していないことを確認して下さい。その後で、このディレクトリとコンテンツをgitへ追加して下さい。大きめの変更はフィーチャーブランチ内で行い、定期的にステージングサーバーを使用したテストの実施を推奨しています。ステージングサーバーの作成は、既存のアプリケーションをforkすることで可能となります。ステージングサーバーをお持ちでなくとも、ステージング用のアプリケーションを作成するイメージです。

デプロイ

Rails4のアプリケーションをデプロイする方法は、Rails3のデプロイ方法と同じです。全てのファイルがgit内に存在していることを確認して下さい。:

$ git add .
$ git commit -m 'deploying rails 4'

その後で、$ heroku createを実行し、新規のHerokuアプリを作成するか、または、以下のように既存のアプリへプッシュして下さい。:

$ git push heroku master

もし、デプロイに失敗するようでしたら、警告とエラーのアウトプットを確認して下さい。デプロイが成功したものの、サイトが正常にロードされない場合は、以下のようにログを確認して下さい。:

$ heroku logs --tail

実行

Rails4のアプリケーションは、Rails3のアプリケーションと同じ方法で実行されます。ルートディレクトリにProcfileを生成することで、以下のように、手動でwebプロセスを起動する方法の定義が可能です。:

web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb

PORT環境変数により、PORTはそれぞれのdynoに別々で割り当てられます。Herokuは、Rails4のアプリがUnicornのような並行webサーバーで実行されることを推奨しています。Procfileに明示しないのであれば、Herokuは、Gemfile内に記述がある場合、thinを使い、$ rails serverコマンド実行時は、webrickを使用します。webrickは、標準ライブラリで利用可能ですが、本番環境での使用は推奨しておりません。ベストパフォーマンスを得て、一貫性を保つためにも、ご自身のwebサービスがどのように実行されるかをProcfile内に明示することを推奨します。

Clone this wiki locally