或るプログラマの開発日記

日々の勉強したことの備忘録なんかに使っていきます

herokuでRailsアプリを動かしてみた

どうも、パイソンです。

osishow3.hateblo.jp

前回の記事では、Windows環境で簡単なRailsアプリを動作させたときの手順を解説しました。

今回の記事は、作成したRailsアプリをHerokuで公開した時の手順のメモになります。

Herokuアカウントの作成

先ずはHerokuにアクセスしてユーザー登録を行います。

www.heroku.com

トップページから、[SIGN UP FOR FREE]のリンクをクリック。

その後は画面の指示に従い、アカウント登録を行います。

Heroku CLIのインストー

アカウント登録が完了したら、Heroku CLIをインストールします。


こちらは、PCからHerokuサーバへのコマンド実行をする為のツールになります。
以下のリンクから、32-bitまたは64-bitのインストーラーをダウンロードして、実行します。

https://devcenter.heroku.com/articles/heroku-cli#windows


f:id:sishow03:20170627010922p:plain
実行後、上のようなダイアログが表示されます。
このインストーラーではHeroku CLIだけでなく、Gitのインストーラーも兼ねているようですね。

今回は両方をインストールするので、そのままNextをクリックします。HerokuCLIのインストールが実行されます。

Gitのインストー

Heroku CLIのインストールが終わると、次にGitのインストールが始まります。
Gitのインストール時の選択項目は少しデフォルトと異なる設定にしました。


f:id:sishow03:20170627010749p:plain
こちらのダイアログでは、Windowsコマンドプロンプトからgitコマンドが実行できる様に、「Use Git from the Windows Command Prompt」を選択しました。


f:id:sishow03:20170627010757p:plain
また、こちらのダイアログでは、「Checkout as-is, commit as-is」を選択しました。
これは、WindowsUnix環境では改行コードの扱いが異なるのですが、Gitでファイルを転送する度に改行コードを変換されるのが煩わしいという個人的な理由からです。


f:id:sishow03:20170627010805p:plain
こちらのダイアログでは、「Use Windows' default console window」を選択しました。

インストール確認

上記のインストール作業完了後、コマンドプロンプトを起動して、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


f:id:sishow03:20170627205624p:plain

アプリが起動し、データ登録が問題なく出来れば完了です。

マイグレーションに失敗する場合

ブラウザでアクセスしてもエラーメッセージが表示される場合は、マイグレーションに失敗している可能性があります。
コマンドプロンプト上に下記の様なメッセージが表示されているかもしれません。

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 <アプリケーション名>

所感など

とりあえず、RailsアプリをHeroku上に公開するところまではなんとか出来ました。
とはいえ、RailsアプリやHerokuのインフラの仕組みなど色々勉強していかないと実用的なアプリケーションは出来ませんね。
今後も色々試してみて、出来た内容をブログにまとめていこうかと思います。

では、また。