Railsアプリをheroku デプロイ

herokuデプロイするまでにそれぞれ異なるエラーが続出し手こずったので忘れないようにまとめます。


# バージョン
$ rails -v
Rails 5.1.4


# herokuログインからの手順 
herokuアカウントがある前提で進めます。

以下の手順でまずは試みる

```
$ heroku login (herokuにログイン)
$ heroku create app12345（app12345という名前で作られます）
$ bundle exec rake assets:precompile # cssをコンパイル
$ git add -A
$ git commit -m "heroku deploy"
$ git push heroku master 　←おそらくエラーが出る
```
 
エラー出ると思うので直していきます。

1. まずはgemfileを確認する

```ruby:gemfile
group :production do
 gem 'pg'     #herokuはpgを使います
 gem 'rails_12factor'
end
#⚠︎それまでsqlite3を使っていたらdevelopment環境下に移動すること
```

2.config/application.rbに

```ruby:config/application.rb
config.assets.initialize_on_precompile = false
```

3.environments/production.rbも変更

```ruby:environments/production.rb
 config.serve_static_files = true #rails4系の時はconfig.serve_static_assetsだった
 config.assets.compile = true
```

これで再プッシュして見てください。。

pushが成功したら

$ heroku run rake db:migrate --app app12345
$ heroku open
デプロイ完了!!



# pg周りのエラー発生

二つ目のアプリデプロイ時には
pgをbundle installしたときに

```
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/local/bin/pg_config
checking for libpq-fe.h... yes
checking for libpq/libpq-fs.h... yes
checking for pg_config_manual.h... yes
checking for PQconnectdb() in -lpq... no
checking for PQconnectdb() in -llibpq... no
checking for PQconnectdb() in -lms/libpq... no
Can't find the PostgreSQL client library (libpq)
*** extconf.rb failed ***
```

こんなエラーが出ましたが、、、

 

$ sudo env ARCHFLAGS="-arch x86_64" gem install pg -v '0.18.4'

上記コマンドで治りました!

 
参考)
ayumu-homes.hateblo.jp

 
 

# pgではなくmysql2でherokuデプロイする方法

 

既にRailsのアプリがあることが前提とpgでデプロイしたことがある方向けに書いてありますので何卒よろしくお願いします。pgでもデプロイもしたことがない方は上部からご覧下さい。
早速database.ymlを下記のようにしておくことで、環境変数で値を設定できるようにしておきます。

```ruby:config/database.yml

production:
  adapter:  mysql2   # postgresの場合はadapterをpostgresql
  encoding: utf8
  database: <%= ENV['DB_NAME'] %>
  username: <%= ENV['DB_USERNAME'] %>
  password: <%= ENV['DB_PASSWORD'] %>
  host:     <%= ENV['DB_HOSTNAME'] %>
  port:     <%= ENV['DB_PORT'] %>
```

$ heroku login
$ heroku create example (この場合exampleという名前でheroku上に登録される)

 

$ git remote -v 　でリモートを確認

```
      heroku https://git.heroku.com/*****.git (fetch)
      heroku https://git.heroku.com/******.git (push)
      origin git@developer.exexex.jp:******/*****.git (fetch)
      origin git@developer.exexex.jp:*****/*****.git (push) 
```
このように表示されればおk

 

## herokuにDBを追加する

$ heroku addons:create cleardb:ignite   

 
## HerokuのアプリにDB情報の環境変数を設定する

 
まずは設定を確認

$ heroku config

→ DB接続の書式が以下のように表示されるのでそれに従って各環境変数を設定する必要があります

mysql://[username]:[password]@[hostname]/[db_name]?reconnect=true

 

上の[ ]内に対応させてそれぞれ設定していきます。

``` 
$heroku config:add DB_NAME="[db_name]"

$heroku config:add DB_USERNAME="[username]"

$heroku config:add DB_PASSWORD="[password]"

$heroku config:add DB_HOSTNAME="[hostname]"

$heroku config:add DB_PORT="3306" #ちなみにpgの場合は5432
```


$ heroku config  で設定を再確認する

この時、DATABASE_URLがpostgresになっていたら、ここもmysql2にする必要がある。（これ直さないと後で面倒くさいです。。。）

＄ heroku config:set DATABASE_URL= 'mysql2://[username]:[password]@[host]/[database]?reconnect=true'

 

再再度確認

$ heroku config 　

DATABASE_URLのところが　mysql２と成っていればおk。

ついでに

Timezoneとlangの設定もしておく

$ heroku config:add TZ=Asia/Tokyo
$ heroku config:add LANG=ja_JP.UTF-8

 
ここでローカルレポジトリをherokuへプッシュ！

$ git push heroku master
$ heroku run rake db:migrate
$ heroku open

完了！！


masterブランチ以外でherokuにpushする方法
git push heroku hoge_branch:master --force