Heroku デプロイで出たエラー【初心者向けメモ】

# Herokuで発生したエラーメモ
Herokuで出たエラーメモです。
書かないと忘れてしまいそうなのでメモとして書きます。
※解決できない場合のgitでの戻し方の方が長くなってしまいました…

![download.png](https://qiita-image-store.s3.amazonaws.com/0/260345/cae3b1b0-23e0-35e6-dc22-8b4c73aa8979.png)

## 1. リポジトリ無いみたいなエラーが出る
`heroku fatal: repository　~~~ dose noe exist`

リネームなどした場合に発生するかもしれません。


### サイト名(アプリ名)リネームしたからかも
testappにするとしたら

```
$ heroku rename testapp
```

↓のように変更される
`https://testapp.herokuapp.com`


リポジトリ間違ってますので再設定しましょう。`testapp`のところにサイト名入ります。

```
$ git remote set-url heroku https://git.heroku.com/testapp.git
```

#### heroku git push先確認

```
$ git remote -v
```

```
heroku  https://git.heroku.com/sampleapp.git (fetch)
heroku  https://git.heroku.com/sampleapp.git (push)
origin  git@bitbucket.org:sampleuser/sampleapp.git (fetch)
origin  git@bitbucket.org:sampleuser/sampleapp.git (push)
```

`git push`や`git push heroku master`などでpushする先を確認できます。違っていたら
`$ git remote set-url heroku https://git.heroku.com/testapp.git`のように変更。

## 2. 前のバージョンに戻してしまう

```
$ heroku rollback v6
```

### バージョン確認

```
heroku releases
```

下記のような表示される

```
v7  Deploy a3525aaa         samplemail@gmail.com  2019/01/19 15:52:18 +0000 (~ 5m ago)
v6  Deploy 44cf704a         samplemail@gmail.com  2019/01/19 15:17:20 +0000 (~ 40m ago)
...
``` 

使うかわからないですけどバージョン確認して戻すことが可能です。確認してv7が最新のようだったらv6にしたら前の状態に戻せます。

## 3. 原因不明のApplicationError
とりあえずHeroku再起動してみましょう

```
$ heroku restart --app application_name
```
参考記事
https://qiita.com/Oakbow/items/1565922ddcdea0ce9ab5



## 4. Cloud9でherokuコマンド使えない
```
$ source <(curl -sL https://cdn.learnenough.com/heroku_install)
$ heroku --version
```

`heroku --version`は確認です。バージョンが出たらOK

## 5.ActiveSupport::MessageEncryptor::InvalidMessage

Encrypted Credentialsでキーなどを秘匿化できる。
TwitterのAPIキーをベタで書くわけにもいかないので
素晴らしい記事を参考にやりました。Rails 5.2以降で使えるようになり、Encrypted secretsよりも推奨されている。

[secrets.ymlや環境変数をRails 5.2のEncrypted Credentialsに移行する](https://qiita.com/d-mato/items/aab2b6b2f587a8582631#%E3%83%87%E3%83%97%E3%83%AD%E3%82%A4)

### 解決手順

先ほどのリンク先で確認していただければいいですが

```
$ EDITOR=vim bin/rails credentials:edit
```

これを打つと秘匿情報ファイルと鍵ファイルを生成。vimで開く
私はtwitter API書いたので↓のように追記してます

```.rb
twitter:
  twitter_api_key: 1234567891011121314
  twitter_api_secret: 345678910111213141516

# aws:
#  access_key_id: 123
#  secret_access_key: 345

# Used as the base secret for all MessageVerifiers in Rails, including the one $
secret_key_base: aaaaaaaaaaadddddddddddgggggggaaaaaaaaaaaaaaaaaaaaaaaaaa
```

蛇足でしょうがvimで保存して閉じるのは`Esc` `:` `wq`です。

herokuはmaster.keyをコピーしておけばいいというわけにはいかないので、環境変数で設定。

```
$ heroku config:set RAILS_MASTER_KEY=`cat config/master.key`
```

git addしてコミットして

```
$ git push heroku
```

私の環境ではこれで解決しました。

# 番外編 webpack関係
vue.js とRailsで作っていた。とりあえずdeployするかと試したらこんなエラーが

```
ActionView::Template::Error (Webpacker can't find main in /app/public/packs/manifest.json. Possible causes:
2019-06-16T10:32:21.913055+00:00 app[web.1]: 1. You want to set webpacker.yml value of compile to true for your environment
2019-06-16T10:32:21.913057+00:00 app[web.1]: unless you are using the `webpack -w` or the webpack-dev-server.
2019-06-16T10:32:21.913060+00:00 app[web.1]: 2. webpack has not yet re-run to reflect updates.
2019-06-16T10:32:21.913062+00:00 app[web.1]: 3. You have misconfigured Webpacker's config/webpacker.yml file.
2019-06-16T10:32:21.913064+00:00 app[web.1]: 4. Your webpack configuration is not creating a manifest.
2019-06-16T10:32:21.913066+00:00 app[web.1]: Your manifest contains:
```

英語だが回答があった
https://github.com/rails/webpacker/issues/532

>I just noticed that /public/packs is in my .gitignore. This was generated by Rails using the rails new --webpack=react command. Could this have something to do with this?

>-Yes that's it - if you compile assets locally heroku won't precompile
So either - remove it from gitignore or don't precompile locally and let heroku do it i.e. delete the public/assets folder

ローカルでasset関係コンパイルするとherokuではやらないよと。
ローカルでコンパイルされないようにするか、.gitignoreにpackが書かれてるから、削除してそれもpushされるようにすればいいと。


## 付録git使って戻す、デプロイ手順のメモ

どうしても解決できない場合、初心者なら下手にあがくより作り直した方が早いかもしれません。

ファイル追加していたらgit addしてから戻します。

```
$ git add -A
$ git checkout master -f
```
前回のコミットまで戻れます。

### 昔のブランチからやり直したい…
```
git reset --hard 昔のコミットのハッシュ値
```

ついでに、ハッシュ値確認方法。(16進数)「q」で終了できる。

```
git log --oneline
```

### リモートも戻す
※かなり注意が必要です。`git reset --hard`だとローカルだけが特定のコミットまで戻った状態です。どうしようもなくなってリモートも戻す必要があるかもしれません。その時は

```
$ git push -f origin HEAD:master
```
強制的にpush。当然リモートが現在のローカルの状態になりますので注意。

まともに動いていた状態からやり直した方がいい場合は使いましょう。

### アプリ新規作成
```
$ heroku login
$ heroku create
```
作ったばかりならば作り直した方が早いかもしれませんので一応。

Herokuにログインしてその後create。
pushしてDB使っていると思うので当然migrateも忘れずに

```
$ git add -A
$ git commit -m "deploy"
$ git push heroku
$ heroku pg:reset DATABASE
$ heroku run rails db:migrate
```

無事作れたら前のアプリはherokuの自分のページ(Dashboard->setting)行って消してもいいと思います。アプリの作れる個数にも制限あるので。

## 使いそうなgit情報まとめ
基本的なgitコマンド書いてある記事
[gitコマンド](https://qiita.com/nt_tn/items/c5ea999a2638e03ee418)