Rails
Heroku
Railsチュートリアル

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