素人がHerokuでRailsアプリを公開(自分用メモ)

# 目的

HerokuにRailsで作成したアプリ(今回はscaffoldで簡単なものを作る)をデプロイする。
Herokuのアカウント登録の説明は省略する。

# やることリスト
 
1. Heroku CLIをインストールする
2. Railsアプリ作成
3. Herokuにアプリを送る

# 環境

- CentOS7 (Linux version 3.10.0-514.21.2.el7.x86_64)
- Vagrant 1.9.1
- Git 1.8.3.1 [適当にインストール](http://qiita.com/tsnb/items/61ee2cde79406d5164d6)

以下のログなどで...となっている箇所は省略の意味。

# 参考

1. Ruby on Rails 5 アプリケーションプログラミング(初版)
2. ドットインストール(Heroku入門)
3. Heroku公式ページ


# 詳細

## 1. Heroku CLIをインストール

[Heroku公式ページ](https://devcenter.heroku.com/articles/heroku-cli#standalone)の通りにインストールする

<img width="784" alt="Screen Shot 2017-08-17 at 0.58.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/152194/87b0526b-c9d8-1a16-0f74-236124e41ce7.png">

CentOS7はStandalone。

自分の環境によってREPLACE_ME_OS,REPLACE_ME_ARCHを変更する。
`uname -s`でOS情報、`uname -m`でアーキ情報が得られる。
自分の環境では、REPLACE_ME_OS=linux,REPLACE_ME_ARCH=x64。
以下のコマンドをホームディレクトリで実行した(どこでもいい)。

```
$ wget https://cli-assets.heroku.com/heroku-cli/channels/stable/heroku-cli-linux-x64.tar.gz -O heroku.tar.gz

$ tar -xvzf heroku.tar.gz

$ sudo mv heroku-cli-v6.13.17-275c5ef-linux-x64 /usr/local/lib/heroku

$ sudo ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku

$ heroku --version
heroku-cli/6.13.18-a444c52 (linux-x64) node-v8.3.0

```

herokuへのログインのためにssh鍵が必要。
ない場合は、ssh-keygenコマンドで以下の鍵ペアを作成する。

```
$ cd ~/.ssh/
$ls
authorized_keys  id_rsa(秘密鍵)  id_rsa.pub(公開鍵)

```

herokuログイン

```
$ heroku login
Enter your Heroku credentials:
Email: ...
Password: ...
Logged in as ...

$ heroku keys:add
...
公開鍵をアップロードする

```

## 2. Railsアプリ作成

### アプリケーション作成

ドットインストールでは rails new ** -d postgresqlとして、
最初からpostgresqlを使うようにしているっぽいが、
この方法は`rails db:migrate`がうまくいかなかったのでやめた。。
gem install pg error対処はしておく。この辺りごちゃごちゃ試したのでインストールしたものが足りてないかも。。

```
$ sudo yum install postgresql-devel
$ sudo yum install postgresql-server
```

```
$ rails new mytest
      create  
      create  README.md
      create  Rakefile
      ...

$ rails s
...

```

サーバを立ち上げてブラウザで以下のような画面が出ればサーバ立ち上げはOK。
<img width="693" alt="Screen Shot 2017-08-17 at 1.48.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/152194/73530446-6b53-dc0a-8f86-e1b62aa42489.png">

```
$ cd mytest
$ vi Gemfile (gem 'therubyracer', platforms: :rubyを有効にする)
$ rails g scaffold Memo title:string body:text
Running via Spring preloader in process 15700
      invoke  active_record
      create    db/migrate/2017..._create_memos.rb
      ...
$ rails db:migrate
== 2017... CreateMemos: migrating ======================================
-- create_table(:memos)
   -> 0.0005s
== 2017... CreateMemos: migrated (0.0005s) =============================

```

以下のような画面が出ればローカルでのアプリケーション作成はOK。
<img width="272" alt="Screen Shot 2017-08-17 at 23.20.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/152194/d4a7a586-3f72-fd0d-c063-49d4959f0475.png">

## 3. Herokuにアプリを送る

Gemfileの編集
`gem 'rails_12factor', group: :production` を追加するらしい。
`gem 'sqlite3'`をコメントアウト。
`gem pg`を追加(postgresqlのため)。

全然わかってないけど、ローカル⇄Herokuのたびにgemの設定を変えるのか？。。

Procfileの作成(Gemfileと同じ階層)
`web: bundle exec rails server -p $PORT`

アセットを準備する

```
$ rails assets:precompile RAILS_ENV=production
Yarn executable was not detected in the system.
Download Yarn at https://yarnpkg.com/en/docs/install
...
```

アプリのディレクトリをGit管理にする

```
$ git init
Reinitialized existing Git repository in 　...
$ git add .
$ git commit -m "init"
[master (root-commit) 1700a57] init
...
```

heroku createを実行

```
$ heroku create
Creating app... done, ⬢ ABC
https://ABC.herokuapp.com/ | https://git.heroku.com/ABC.git
↑このURLを開く

$ git push heroku master
Counting objects: 116, done.
...
remote: Verifying deploy... done.
To https://git.heroku.com/ABC.git
 * [new branch]      master -> master

$ heroku run rails db:migrate
...
```

以下のような画面が出れば成功。

<img width="430" alt="Screen Shot 2017-08-17 at 23.55.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/152194/dc517c00-123a-a00f-adfb-1148c6ff232f.png">

# おしまい

情報が古かったり、参考ごとにやり方が違ったり足りてなかったりして、この手順が良いのかは不明。
一応、数回やり直してもうまくできているのでまあいいか。。
言われた通りにやっている所は何をしているか理解していない部分もあるので今後の課題。