herokuでRails5のアプリをdeployする

## About
herokuの公式ページそのまんまの情報です。せっかくなので作業メモとして投下。

## 準備編

```
$ brew install heroku
```

## 基本編

```
# ログインする
$ heroku login

# 環境変数を確認する
$ heroku config

# 環境変数を登録する
$ heroku config:set HOGE=fuga

# 環境変数を取得する
$ heroku config:get HOGE

# 環境変数を登録解除する
$ heroku config:unset HOGE

```

```
# addonを導入する
$ heroku addons:add heroku-postgresql
```

## Rails5.X
https://devcenter.heroku.com/articles/getting-started-with-rails5

### Railsアプリを作る

```
$ be rails new myapp -d postgresql
$ cd myapp
$ be rails g controller welcome
$ vim app/views/welcome/index.html.erb
<h2>Hello World</h2>
<p>
  The time is now: <%= Time.now %>
</p>
```

```
$ vim config/routes/rb
Rails.application.routes.draw do
  root 'welcome#index'
end
$ be rails db:create
```

ここまで来れば`rails s` してローカル上でアプリが見られる

### herokuにdeploy

```
$ git init
$ git add .
$ git commit -m "init"
```

```
# appを作成する
$ heroku create
$ git config --list | grep heroku

# pushしてアプリがdeployされる
$ git push heroku master

# deployしたアプリを確認する（この時点ではエラー
$ heroku apps:info

# dbをmigrate
# ログインしてrails db:migrateを叩く
$ heroku run rails db:migrate

# ブラウザで開く
$ heroku open

# アプリの状況を確認する
$ heroku ps

# ログを確認する
$ heroku logs
$ heroku logs --tail
```

### 番外編

```
# pumaを利用する
$ vi Procfile
web: bundle exec puma -t 5:5 -p ${PORT:-3000} -e ${RACK_ENV:-development}
```

## backup編

こちらと同じもの https://devcenter.heroku.com/articles/heroku-postgres-backups

### DBのbackup

```
# backupを取得する
$ heroku pg:backups:capture --app <appname>

# backupの状況を確認する
$ heroku pg:backups:info

# backupを辞める
$ heroku pg:backups:cancel
```

backupの数はplanで決まっているので注意

### スケジュールでのbackup

```
# スケジュールを確認する
$ heroku pg:backups:schedules --app <appname>

# スケジュールを登録する
$ heroku pg:backups:schedule DATABASE_URL --at '02:00 Asia/Tokyo' --app <appname>

# スケジュールを解除する
$ heroku pg:backups:unschedule --app <appname>
```

### backupにアクセスする

```
# backupが保存してあるpublicなendpointを取得する（60minutesで使えなくなる
$ heroku pg:backups:url --app <appname>

# donwloadする
$ heroku pg:backups:download
# currentにdumpファイルが出来ている
```

### backup情報を確認する

```
# 概要を取得
$ heroku pg:backups
=== Backups
ID    Created at                 Status                               Size    Database
────  ─────────────────────────  ───────────────────────────────────  ──────  ────────
b001  2017-01-30 05:44:27 +0000  Completed 2017-01-30 05:44:29 +0000  5.36kB  DATABASE

=== Restores
No restores found. Use heroku pg:backups:restore to restore a backup

=== Copies
No copies found. Use heroku pg:copy to copy a database to another

# backupの詳細情報を取得
$ heroku pg:backups:info b001
=== Backup b001
Database:         DATABASE
Started at:       2017-01-30 05:44:28 +0000
Finished at:      2017-01-30 05:44:29 +0000
Status:           Completed
Type:             Manual
Original DB Size: 7.30MB
Backup Size:      5.36kB (100% compression)
```

### backupをrestore/deleteする

```
$ heroku pg:backups:restore b001 DATABASE_URL --app <appname>
# appnameのタイプを求められる

# 他のアプリのバックアップを利用する
$ heroku pg:backups:restore <appname>:b001 DATABASE_URL --app <appname>-staging
$ heroku pg:backups:restore 'https://hogehoge/me/items/mydb/dump' DB_URL -a <appname>

# DBのバックアップを削除する
$ heroku pg:backups:delete b001 --app <appname>

# DBをコピーする
$ heroku pg:copy COBALT GREEN --app <appname>
# COBALT -> GREENにコピー
```

### sqlを直接叩く

```
$ heroku pg:psql -c "select * from users"
```