概要
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