ようやくHerokuを使ってデプロイが出来ました。
AWSよりは簡単にデプロイ出来ましたが、少し詰まったところもありましたので、
Herokuへのデプロイ最速手順を備忘録として残します。
参考にさせていただいたページ
事前準備
- Herokuアカウントを取得しておきましょう
Heroku公式サイト - HerokuでMySQLを使用するためにクレジットカードを登録しておきましょう
(Herokuの右上のユーザー情報から"Account Setting" → "Billing"にてクレジットカードを設定できます)
※ 超過しない限り請求されることはありません。 - gitへデプロイするアプリの保存をしておきましょう
HerokuのCLIを導入
$ brew install heroku/brew/heroku
Herokuコマンドが使えるか確認
$ heroku -v
herokuのバージョンが出てくればherokuコマンドが使えるので問題ありません
› Warning: heroku update available ・・・・・
と表示された場合は下記コマンド入力してherokuをバージョンアップしましょう
$ heroku update
Herokuのリポジトリ用のアプリを作成
$ cd <デプロイしたいアプリ>
$ heroku create <アプリ名>
#ここで入力したアプリ名がURLに入ります(https://<アプリ名>.herokuapp.com)
$ heroku rename <変更したいアプリ名>
#アプリ名を変更した場合はこちらを入力
Herokuホームページでもリポジトリは作成できますが、
今回はCLIでのデプロイ方法となりますので割愛いたします。
Databeseを設定
production:
<<: *default
url: <%= ENV['DATABASE_URL'] %>
database: <%= ENV['DATABASE_USERNAME'] %>
username: <%= ENV['DATABASE_PASSWORD'] %>
password: <%= ENV['RAILS_MASTER_KEY'] %>
プリコンパイルの設定
※こちらはアプリケーションのパフォーマンスに悪影響を及ぼす場合はあるため設定しないでください。
以下Herokuのヘルプページより引用
本番環境でアプリケーションの config.assets.compile = true を有効にすると、アプリケーションが非常に低速になる場合があります。
(中略)
この設定は、実行時にその他の不安定な動作の原因になることも知られているため、通常は推奨されません。
config.assets.compile = true
Railsは本番環境での動的な画像の表示(プリコンパイル)がデフォルトでオフになっています。
画像を表示するために以下の記述をfalse
からtrue
に変更してください。
この記述により、assets以下のフォルダから動的にコンパイルしながらページを読み込みます。
また、以下の内容も指定のディレクトリに記述してください。
※以下も現在は使われない設定値のため、特に記述する必要はありません。
config.assets.initialize_on_precompile = false
こちらは本番環境にて、プリコンパイルのタスクをRailsの起動無しで実行するように指定します。
尚、Herokuにデプロイ後、ブラウザで画像が表示されない場合は、以下記事を参考に画像の拡張子やパスを再度確認してみましょう。
(@jnchitoさんありがとうございます)
HerokuでRailsが使えるようgemを導入
※Rails 5以降ではこのgemのインストールは必要ありません。
gem 'rails_12factor', group: :production
入力後bundle install
も忘れずに。
HerokuでMySQLを使用するため、環境変数を設定
$ heroku addons:create cleardb:ignite
#CLEARDB_DATABASE_URL: mysql://ユーザー名:パスワード@サーバー名/データベース?reconnect=true
cleardb
というのがherokuでmysqlを使うためのアドオンになります。
環境変数を追加
$ heroku config:set DATABASE_URL=""
""の間に値を入れて追加していきます
(DATABASE_URLの部分をDB_PASSWORDやDB_USERNAMEに変える)
$ heroku config:set DB_USERNAME="" #任意
$ heroku config:set DB_PASSWORD="" #任意
$ heroku config:set SECRET_KEY_BASE="" #下記のコマンドを入力して確認
$ bundle exec rake secret RAILS_ENV=production
ここに出てくるデータがSECRET_KEY_BASEの値になります
環境変数はheroku config
コマンドで確認が出来ます。
heroku config
を入力し、入力した内容が反映されていれば完了です。
データベースのバージョンに注意
heroku config
で環境変数を確認すると以下の様に出力されます。
=== <アプリ名> Config Vars
CLEARDB_DATABASE_URL: mysql://bc***********f:9******6@us***********************05.cleardb.net/heroku_**************36?reconnect=true
DATABASE_URL: mysql://bc***********f:9******6@us***********************05.cleardb.net/heroku_**************36?reconnect=true
DB_PASSWORD: **********
DB_USERNAME: **********
LANG: en_US.UTF-8
RACK_ENV: production
RAILS_ENV: production
RAILS_LOG_TO_STDOUT: enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE: e1b523***************89c41048d********************dd7f24****************f38bce8f************bbb*************0462bcf5*************cb052e7
CLEARDB_DATABASE_URL
とDATABASE_URL
がmysql
を使用する設定となっておりますが、
デプロイするアプリが**mysql2
**を使用する場合は、どちらもmysql2
に変更しないとページが表示されないので注意してください。
変更する際はHerokuのマイページより対象のアプリを選択、ダッシュボード内のsetting
の中にあるConfig Vars
のReveal Config Vars
をクリックすると環境変数が表示されますので、そこで変更しましょう。
Herokuにpushし自動デプロイを行います
$ git push heroku master
remote: -----> Discovering process types
remote: Procfile declares types -> (none)
remote: Default types for buildpack -> console, rake, web
remote:
remote: -----> Compressing...
remote: Done: 51.6M
remote: -----> Launching...
remote: Released v26
remote: https://<アプリ名>.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/<アプリ名>.git
6d73aed..b64f81f master -> master
このような表示が出てきたら、ひとまずデプロイは完了です!
デプロイが完了したら本番環境でアプリを開きましょう
$ heroku open
ちゃんと本番環境で表示がされているか確認してみましょう。
本番環境上のログを確認するコマンド
$ heroku logs
本番環境でのログが確認できます。
ページが表示できない時や遷移したページが表示されない時は、
入力してエラー内容を確認してみましょう。
##その他使用したコマンド
$ heroku run rake db:migrate
# ローカルでマイグレーションファイルを追加した際は再度デプロイ後マイグレーションファイルの更新が必要
$ heroku run rake db:reset
# ローカルでのコマンド同様、本番環境でデータベースをリセットしたい時に使用
$ heroku run rake db:seed
# seedに初期データを登録していて本番環境のデータベースをリセットした際、再度seedを読み込むために必要
Heroku ClearDBとSequel Proを繋げる方法
本番環境のデータベースのレコードを見たい時ありますよね。
そんな時はSequel Pro
に繋いじゃいましょう!
$ heroku config --app <アプリ名>
=== アプリ名 Config Vars
CLEARDB_DATABASE_URL: mysql://ユーザー名:パスワード@ホスト/データベース?reconnect=true
〜〜〜〜
CLEARDB_DATABASE_URL
の中身は上記のようなルールになっています。
これをSequel Pro
を立ち上げた際の接続情報に入力してあげればいいわけです。
ホスト
・ユーザー名
・パスワード
の部分はCLEARDB_DATABASE_URL
からコピー、
データベース
・ポート
は入力しなくても構いません。
名前
は任意ですのでわかりやすい名前をつけて接続をクリックすれば完了です。