herokuでRailsアプリを動かしてみた
どうも、パイソンです。
前回の記事では、Windows環境で簡単なRailsアプリを動作させたときの手順を解説しました。
今回の記事は、作成したRailsアプリをHerokuで公開した時の手順のメモになります。
Herokuアカウントの作成
先ずはHerokuにアクセスしてユーザー登録を行います。
トップページから、[SIGN UP FOR FREE]のリンクをクリック。
その後は画面の指示に従い、アカウント登録を行います。
Heroku CLIのインストール
アカウント登録が完了したら、Heroku CLIをインストールします。
こちらは、PCからHerokuサーバへのコマンド実行をする為のツールになります。
以下のリンクから、32-bitまたは64-bitのインストーラーをダウンロードして、実行します。
https://devcenter.heroku.com/articles/heroku-cli#windows
実行後、上のようなダイアログが表示されます。
このインストーラーではHeroku CLIだけでなく、Gitのインストーラーも兼ねているようですね。
Gitのインストール
Heroku CLIのインストールが終わると、次にGitのインストールが始まります。
Gitのインストール時の選択項目は少しデフォルトと異なる設定にしました。
こちらのダイアログでは、Windowsのコマンドプロンプトからgitコマンドが実行できる様に、「Use Git from the Windows Command Prompt」を選択しました。
また、こちらのダイアログでは、「Checkout as-is, commit as-is」を選択しました。
これは、WindowsとUnix環境では改行コードの扱いが異なるのですが、Gitでファイルを転送する度に改行コードを変換されるのが煩わしいという個人的な理由からです。
インストール確認
上記のインストール作業完了後、コマンドプロンプトを起動して、herokuコマンドとgitコマンドが問題なく動作すればインストールは成功です。
>heroku --version heroku-cli/5.11.12-8ae9780 (windows-amd64) go1.7.5 >git --version git version 2.8.1.windows.1
Railsアプリケーションの設定
Herokuに公開するにあたり、データベースとしてpostgresqlを使う為の設定を行います。
(サンプルアプリなのでsqliteでも良い問題無いかもしれませんが、その辺は今回検証しておりません。)
前回の記事で作成したRailsアプリ内のファイルを編集します。
Gemfileの編集
RailsアプリではGemfileというファイルに、アプリの動作に必要なライブラリが記載されています。ここに、Postgresqlモジュールの定義を追加します。
変更前
gem 'sqlite3'
変更後
gem 'sqlite3', group: :development # Use postgresql as the database for Active Record in production gem 'pg', group: :production
上記の書き方で、development環境ではsqlite3、production環境ではpostgresqlを利用するようになります。
config/database.ymlの編集
データベース定義であるdatabase.ymlを以下のように編集します。
変更前
production: <<: *default database: db/production.sqlite3
変更後
production: <<: *default adapter: postgresql encoding: unicode pool: 5
これで、production環境でのデータベースをpostgresqlに設定出来ました。
この作業が完了したら、コマンドプロンプトを起動し、Railsアプリのフォルダまで移動後、以下のコマンドでGemfileに追加したモジュールのインストールを行います。
>bundle install
Railsアプリケーションのデプロイ
ここから、Herokuへのアプリケーションのデプロイを行っていきます。コマンドプロンプトを起動し、以下のコマンドを順次実行していきます。
>heroku login
先ずはloginコマンドを実行します。認証情報が要求されるので、アカウント登録時のメールアドレスとパスワードを入力してログインします。
>heroku create
次に、createコマンドを実行します。これはHeroku上にアプリケーションを登録するコマンドになります。実行すると以下の様な出力が表示されます。
Creating app... done, <アプリケーション名> https://<アプリケーション名>.herokuapp.com/ | https://git.heroku.com/<アプリケーション名>.git
今回はcreateの後ろに何も入力していませんので、アプリケーション名はHeroku側が自動で決めてくれます。
因みに、自分でアプリケーション名を付けたい場合は、createの後ろにアプリケーション名を指定しましょう。但し、アプリケーション名はHeroku上で一意である必要があります。
アプリケーションの登録後、ローカルのRailsアプリ上でGitのリポジトリを作成し、Heroku側にpushします。コマンドプロンプトからRailsアプリのフォルダまで移動した後、以下のコマンドを順次実行します。
> git init > heroku git:remote -a <アプリケーション名> > git add --all > git commit -m "initial commit" > git push heroku master
git pushまで実行すると、Heroku上でアプリケーションのデプロイが行われます。
補足
因みに、heroku createコマンドをRailsアプリのフォルダ上で実行した場合はgitリポジトリの設定もしてくれるようで、
> git init > heroku git:remote -a <アプリケーション名>
の2つの実行が省略出来るようです。
デプロイに失敗する場合
この時、もし最後のデプロイに失敗したらコンソール出力に以下のようなメッセージが出てしまいます。
error: failed to push some refs to 'https://git.heroku.com/<アプリケーション名>.git'
Gemfileかdatabase.ymlに問題がある可能性が高いですが、別の原因の場合はコマンドプロンプトのエラー出力から原因を追うしかありません。
Railsアプリケーションのマイグレーション
デプロイ後、データベースのマイグレーション処理を行います。以下のコマンドを実行します。
heroku run rake db:migrate
マイグレーション後、ブラウザからアプリケーションにアクセスします。
https://<アプリケーション名>.herokuapp.com/blogs
アプリが起動し、データ登録が問題なく出来れば完了です。
マイグレーションに失敗する場合
ブラウザでアクセスしてもエラーメッセージが表示される場合は、マイグレーションに失敗している可能性があります。
コマンドプロンプト上に下記の様なメッセージが表示されているかもしれません。
PG::ConnectionBad: could not connect to server: No such file or directory
このエラーが表示される場合は、Heroku上のアプリケーションにPostgresqlのアドオンが登録されていない可能性があります。
>heroku addons:add heroku-postgresql
上記コマンドでアドオン登録を行った後、再度マイグレーション処理を実行すると、問題が解決する事があります。
参考:Heroku上からのアプリケーションの削除
ここまでで、Heroku上にアプリケーションを公開するところまで行いました。
今回登録したアプリケーションは、インターネット上に公開され、URLさえ解れば誰でもアクセスできる状態にあります。
ま、誰かがアクセスして来たとしても実害はあることは無いでしょうが、公開されたままの状態が気持ち悪いという場合は、以下のコマンドでアプリケーションを削除しておきましょう。
heroku apps:destroy --app <アプリケーション名>