Railsチュートリアル第4版 第1章にて、Heroku CLIインストールで詰まった時のメモ

# 概要
Railsチュートリアル第4版( https://railstutorial.jp/chapters/rails_flavored_ruby?version=5.1 )
第1章 1.5.1 Herokuのセットアップ にて、
Heroku CLIがすんなりインストールできなかったため、メモを残す。

# 環境
- IDE: AWS Cloud9
    - EC2: Amazon Linux AMI release 2017.09
- Rails: v5.1.4
- Heroku CLI: 6.16.8-ae149be (linux-x64) node-v9.11.1

# 結論
**Heroku CLIはstandaloneインストールしよう**
https://devcenter.heroku.com/articles/heroku-cli#standalone-installation

# 調査メモ
1.5.1のセットアップスクリプトを実行

```bash
$ source <(curl -sL https://cdn.learnenough.com/heroku_install)
```

npmでnをインストールするステップで、SSL証明書に関するエラー（Error: UNABLE_TO_GET_ISSUER_CERT_LOCALLY）が発生
https://github.com/npm/npm/issues/20191

スクリプト実行前に、npm実行時、SSL証明書の制限を無視するよう設定してみる。

```bash
$ sudo npm config set strict-ssl false
```

再度セットアップスクリプトを実行
nはインストールできたが、heroku-cliのインストールでパーミッションのエラーが発生

```bash
$ source <(curl -sL https://cdn.learnenough.com/heroku_install)
(中略)
npm WARN checkPermissions Missing write access to /usr/local/lib/node_modules
npm WARN cli-engine-heroku@4.1.1 requires a peer of cli-engine-command@^8.0.0 but none is installed. You must install peer dependencies yourself.

npm ERR! path /usr/local/lib/node_modules
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall access
npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!  { Error: EACCES: permission denied, access '/usr/local/lib/node_modules'
npm ERR!   stack: 'Error: EACCES: permission denied, access \'/usr/local/lib/node_modules\'',
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'access',
npm ERR!   path: '/usr/local/lib/node_modules' }
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.
```

試しにsudo実行すると、下記エラーが発生

```bash
$ sudo /usr/local/bin/npm install -g heroku-cli
(中略)
/usr/local/lib/node_modules/npm/lib/utils/unsupported.js:28
        console.error(`a bug known to break npm. Please update to at least ${r
                      ^
SyntaxError: Unexpected token ILLEGAL
    at Module._compile (module.js:439:25)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at /usr/local/lib/node_modules/npm/bin/npm-cli.js:19:21
    at Object.<anonymous> (/usr/local/lib/node_modules/npm/bin/npm-cli.js:92:3)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
```

パーミッションエラーを解決するために、npmを再インストールする必要があるようなので、一度yum removeしてからnvmで最新版を入れてみる
https://docs.npmjs.com/getting-started/fixing-npm-permissions

```bash
sudo yum remove nodejs npm
nvm install node
npm config delete prefix
nvm use v9.11.1
/usr/local/bin/npm install -g heroku-cli
```
※ この辺りで大分ごちゃごちゃnodejs,npm,n,nvmあたりを手あたり次第弄ったので、再現できる内容じゃないかも。

一応、npm installは成功
だが、インストール時のターミナルではherokuコマンドが使えるが、ターミナルを開き直すと、herokuコマンドが使えん。。。
恐らく.bash_profileのせいかな？でも、ちゃんとセットアップスクリプトで指定されたPATHは入れてるんだよな。。

```bash
$ cat ~/.bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
source $HOME/.nvm/nvm.sh
PATH=/usr/local/bin:$PATH
```

この辺で、**そも今回の開発では使用しないNode.js周りに悩まされてる事に嫌気が差した**ので、、、

ちょっと視点を変えて、Herokuのマニュアルを当たってみる。
公式マニュアルによれば、npmでのインストールはnodeのバージョン次第で正常に動作しない可能性があるため、非推奨。
https://devcenter.heroku.com/articles/heroku-cli#npm

一旦、npmでheroku-cliを削除して、

```bash
/usr/local/bin/npm uninstall -g heroku-cli
```

推奨されているstandaloneインストールを試す。
https://devcenter.heroku.com/articles/heroku-cli#standalone-installation

```bash
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
mkdir -p /usr/local/lib /usr/local/bin
sudo mv heroku-cli-v6.16.8-ae149be-linux-x64 /usr/local/lib/heroku
sudo ln -s /usr/local/lib/heroku/bin/heroku /usr/local/bin/heroku
```

**解決！！**

```bash
$ heroku --version
heroku-cli/6.16.8-ae149be (linux-x64) node-v9.11.1
```