##事象
SSHで本番環境にログイン後、capistranoでデプロイ中に、以下のようなエラーになった。
ArgumentError: invalid byte sequence in US-ASCII
(中略)
error: invalid byte sequence in US-ASCII
原因
http://yano3.hatenablog.jp/entry/2012/11/25/234244
私の場合は、こちらに書いてあることが、まんまソレでした。
SSH側でenvを確認して、こんな感じだったらおそらくビンゴ。
$ env | grep -e LANG -e LC_CTYPE
LANG=en_US.UTF-8
LC_CTYPE=UTF-8
とりあえずの対処として、SSH先のLC_CTYPEを、例えばLANGと同じにしておくなど。でも再ログインすると元通りになってしまう。
export LC_CTYPE=en_US.UTF-8
原因が上記サイトに書かれているので引用します。
- Mac の Terminal.app の Settings > Advanced > Set locale environment variables on startup がオンになっていると、 Mac 側で
LC_CTYPE=UTF-8
が設定される。
- Mac の
/etc/ssh_config
でSendEnv LANG LC_*
になっているので、LC_CTYPE
が ssh サーバに送信される。 - Ubuntu の
/etc/ssh/sshd_config
でAcceptEnv LANG LC_*
になっているので、 Mac からのLC_CTYPE
が Ubuntu に渡される。 -
UTF-8
というロケールはない (正しくはen_US.UTF-8
とかja_JP.UTF-8
) ので怒られる。
なるほど。ターミナルめ…
対処法
一番の原因であるターミナルの設定を変更しませう。
※ターミナルの設定を以下のようにすると、コンソール上で日本語が入力出来なくなってしまった。チェックは外さない方が良いみたい。/etc/ssh_conf
の設定のみ無効にしておく。
併せて、etc/ssh_config
のSendEnv
も念のため無効にしておく
/etc/ssh_config
Host *
# SendEnv LANG LC_*
ポエム
ロケールの設定って大変ややこしい。そしてローカライズを考えるたびに、USの勝ち組っぷりに嫉妬する。