Herokuを使ったデプロイ方法

f:id:ryoutaku_jo:20190302031059p:plain

【結論】
・HerokuとはPaaSと呼ばれるアプリケーションを
 実行する為のプラットフォーム

AWSなどの様な複雑なセットアップ作業を経ずに、
 簡単にアプリケーションをインターネットに公開出来るサービス


【目次】


【本題】

ウォンテッド・スコアが100を超えない・・・

そろそろ本格的に就活を進めて行こうという事で、
以前に登録していたwantedlyのプロフィールを詰めていくことにしました。

www.wantedly.com


一先ず、下記の記事を参考にウォンテッド・スコア100超えを目指したのですが・・・

qiita.com












全然上がらない(笑)

紹介文は文字数制限一杯まで埋めましたし、他の項目も全て埋めたのに
80くらいでストップしてしまいました・・・

何か他に手立てが無いか模索したところ、
ポートフォリオを一つ追加すると、+5くらい一気に上がることに気づきました!

なので、まだデプロイのやり方を知らなかった初期に作ったアプリ達も
片っ端からデプロイして、公開する策にうって出ました。

但し、一つづつAWSにデプロイするのは、非常に面倒だったので、
比較的デプロイが簡単に出来るという噂に「Heroku」を今回試すことにしました。

※ちなみに後で気づいたことですが、プロフィールの公開範囲を
wantedly登録ユーザー」から「一般公開」に広げると、一気に+20くらい上がりました・・・

Herokuとは

PaaSと呼ばれるアプリケーションを実行する為のプラットフォームです。

jp.heroku.com


AWSなどでアプリを公開しようとすると、下記のような非常に煩雑な処理が必要になります。
インスタンス作成
・IP割り当て
Linuxサーバーの構築
MySQLのセットアップ
・Nenginxのセットアップ
unicornのセットアップ
Capistranoのセットアップなどなど・・・

まだ複雑なだけなら良いのですが、問題はエラーが発生した時です。

特に初心者の頃は、それぞれが何をどうしているのかさっぱり分からない(今も完全に理解してない)ので
エラーが起きても原因が特定出来ずに、非常に苦しめられます・・・

ryoutaku-jo.hatenablog.com
※体験談

そこで登場するのが「Heroku」です!

Herokuは、本来であれば複雑な処理を行って形成するアプリケーションを
公開する為の土台(プラットフォーム)を、WEB上で提供してくれるサービスになります。

なので、面倒な処理は一切必要なし!
・・・と思っていたのですが、多少準備は必要なので、それをここからまとめます。

※注意※
下記は、「Rails 5.2.2」で、rails newした際に
「-d mysql」のオプションを指定したアプリで実行しています。
環境によっては、同じように動作しないかもしれないので、ご注意ください

1:Herokuのアカウント登録

まずHerokuのアカウント登録を行います。

jp.heroku.com

f:id:ryoutaku_jo:20190302022044p:plain

f:id:ryoutaku_jo:20190302022104p:plain

f:id:ryoutaku_jo:20190302022122p:plain

f:id:ryoutaku_jo:20190302022140p:plain

f:id:ryoutaku_jo:20190302022156p:plain

1:Heroku CLIのインストール

Herokuのコマンドを使える様にする為に、
下記サイトからHeroku CLIをインストールします。

The Heroku CLI | Heroku Dev Center

f:id:ryoutaku_jo:20190302022215p:plain

f:id:ryoutaku_jo:20190302022232p:plain

f:id:ryoutaku_jo:20190302022245p:plain

f:id:ryoutaku_jo:20190302022300p:plain

f:id:ryoutaku_jo:20190302022316p:plain

2:Gemfileの編集

Herokuを利用するにあたってgemfileを編集していきます

# gem 'mysql2', '>= 0.4.4', '< 0.6.0'
〜中略〜
group :development, :test do
  gem 'mysql2', '>= 0.4.4', '< 0.6.0'
end

まず、データベースに関するgem(今回はmysql2、デフォルトならsqlite3)を、
コメントアウトして、「group :development, :test do」に追加します。

これは、Herokuが「PostgreSQL」というデータベースを利用しているので、
本番環境では別のgemを読み込ませる必要があるからです。

PostgreSQL」のgemは本番環境だけ読み込めれば良いので、
下記のように追加します。

group :production do
  gem 'pg'
end

次にbundle installですが、下記のコマンドで実行します。

bundle install --without production

これは、「group :production」で指定した先ほどの
「gem 'pg'」以外のgemだけインストールする為のコマンドです。

3:database.ymlの編集

Railsではデータベースに接続する為の情報を、
config/database.yml というファイルに保存しているのですが、
デフォルトだとsqlite(今回はmysql)に適した記述になっているので、
そちらを編集します。

production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5

adapter: postgresqlが、postgresqlのデータベースに接続する為の記述
encoding: unicodeが、文字コードunicodeで利用する為の記述
pool: 5が、データベースに接続出来る上限を5に制限する記述です。
※5である理由は不明だが、どのサイトも5で説明されていたのでデフォルト値?

4:config/environments/production.rbの編集

Railsの初期状態だとプリコンパイルがオフになっているので、
下記の様に設定を変えます。

config.assets.compile = true

変えていないと、デプロイ時に下記の様なエラーが発生します。
f:id:ryoutaku_jo:20190302030715p:plain

5:ターミナルからHerokuにログイン

ターミナルで下記コマンドを実行して、Herokuにログインします。

heroku login

f:id:ryoutaku_jo:20190302022748p:plain

f:id:ryoutaku_jo:20190302022724p:plain

f:id:ryoutaku_jo:20190302022758p:plain

6:アプリを登録

URLにもなるアプリ名を登録します。

heroku create mini-blogsapp

※「mini-blogapp」は任意です

f:id:ryoutaku_jo:20190302023142p:plain

↑成功
↓失敗(他に登録されている名前と重複)

f:id:ryoutaku_jo:20190302023253p:plain

7:アプリのデプロイとマイグレーション

下記のコマンドでアプリをデプロイさせます。

git push heroku master

ちなみに、リポジトリ名と先ほど設定した名前が異なると、
下記の様なエラーが出ます。
f:id:ryoutaku_jo:20190302030837p:plain

そして下記のコマンドで本番環境のマイグレーションを行います。

heroku run rake db:migrate

f:id:ryoutaku_jo:20190302030735p:plain

無事デプロイできました!

《今日の学習進捗(3年以内に10000時間に向けて)》

就活とデプロイと Dockerと基本情報技術者試験対策。

学習開始からの期間 :84日
今日までの合計時間:840h
一日あたりの平均学習時間:10h
今日までに到達すべき目標時間:767h
目標との解離:73h
「10,000時間」まで、

残り・・・「9160時間!」