Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

概要

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のセットアップスクリプトを実行

$ 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証明書の制限を無視するよう設定してみる。

$ sudo npm config set strict-ssl false

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

$ 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実行すると、下記エラーが発生

$ 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

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は入れてるんだよな。。

$ 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を削除して、

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

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

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

解決!!

$ heroku --version
heroku-cli/6.16.8-ae149be (linux-x64) node-v9.11.1
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away