銀の弾丸

プログラミングに関して、いろいろ書き残していければと思っております。

Heroku CLI 7.0.2? のエラーを修正

f:id:takamints:20180422144244p:plain

Git for Windowsから最新版の Heroku CLI を起動するとエラーが発生。バージョンは下に書いてますけど、そもそもエラーが出るので確認できない。Power Shellからなら大丈夫。32ビット版でも64ビット版でも同様ですね。未確認ですが、MSYS とか Cygwinでも同じ現象が起きるんじゃないかなと思います。

とりあえずはインストールされたシェルスクリプトに1文字追加すれば治ります。

直接的な原因が分かったところでGitHubにはIssueを上げてひと安心。「さてIssueも上げたしForkしてCommitしてプルリクしてどや顔するかな相手は天下のセールスフォースドットコム・・・」と、ヤケに日曜朝から心拍数を上げたのですが(おちつけ自分)、結局どこを直せばよいのかわからなくてWatchだけして、そっとGitHubを閉じました。 が、なんと4時間後にはこの問題が改修されててIssueもClose。素早い対応ありがとうございますー。

クラウド開発徹底攻略 (WEB+DB PRESS plus)
菅原 元気 磯辺 和彦 山口 与力 澤登 亨彦 内田 誠悟 小林 明大 石村 真吾 相澤 歩 柴田 博志 伊藤 直也 登尾 徳誠
技術評論社
売り上げランキング: 88,620

インストール直後にエラー

Windows用Heroku CLIの最新版をインストールしてGit Bashから実行すると以下のエラーが発生しました。

$ heroku
sed: -e expression #1, char 7: unterminated `s' command
/c/Program Files/heroku/bin/heroku: line 4: ./../client/bin/heroku.cmd: No such file or directory

sedのsコマンドが終わってない」と言っている。

原因究明

コマンドはC:\Program Files\heroku\bin\herokuという名のシェルスクリプトなので中身を見てみると。

#!/bin/sh
basedir=$(dirname "$(echo "$0" | sed -e 's,\,/,g')")

"$basedir/../client/bin/heroku.cmd" "$@"
ret=$?
exit $ret

2行目で、sedでバックスラッシュ(円記号)をスラッシュに変換しようとしているが、バックスラッシュがエスケープされていませんね。

応急対策

これエスケープするだけで動くんじゃないかね?と

f:id:takamints:20180422095556p:plain

Git Bashを管理者権限で開いてvimで編集したところ、ホントにこれだけで正しく動くようになりました。 (Program Files 以下を変更するには管理者権限が必要)

バージョンは 7.0.2、、、ん?

バージョンは以下のように7.0.2だったのですが、これってホントにリリースバージョンなんですかね。 GitHubリポジトリでは現時点でv6.16.16です。Windows用は別管理ってことはないと思うんだけど。

これ、ダウンロードページから公開しちゃいけないものを公開しちゃっているとかではないのかな。 よくわからなくなってきました。

$ heroku --version
heroku-cli/7.0.2 win32-x64 node-v9.11.1

とりあえずIssueはポスト

しかしまあ、しばしGoogle翻訳と格闘してから、とりあえずIssueをポストしておいた。

で、現在のリポジトリ内の /resources/exe/heroku が問題のスクリプトなんだけど、不思議なことに半年前に追加されたときから、きちんとエスケープされている。 ということで、どこを直せばよいのかわかりません。インストーラを作るところか動作上の問題なのか。

まあ偉い人が直してくれるんだろう。なにしろ天下のセールスフォースドットコムだし。

追記)この記事書いた時点で既にIssueがクローズされていました。早っ! 修正箇所はやっぱりresources/exe/herokuで。バックスラッシュが4つになっていましたわ。 二重にエスケープしなきゃなんなかったのかー。

関連リンク

devcenter.heroku.com

github.com

github.com