まだ4章途中までしか読んでいないので、そこまでの地味にめんどくさいことへの対応まとめです。増えたら追記します。
環境
Railsチュートリアルの推奨環境を想定しています
- Cloud9のIDE(30分アクセスがないとサーバーが落ちるようにしている)
- Heroku
毎回ssh-addさせられる
さぁ今日もRailsチュートリアルがんばるぞ!
さぁpushだ!
:
$ git push
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
またおまえか!
ターミナル毎に設定されているようなので、サーバを立ち上げなおしたり、別のターミナルを開いたりすると秘密鍵が登録されていない状態に戻ってしまいます。
対処法
再設定のためにssh-agent立ち上げて、ssh-addして…を毎回やるのは面倒なので
設定コマンドを「ターミナルが起動したら自動的に実行」されるようにします。
$ vi ~/.bashrc
# 以下をファイルの最後に追記
eval `ssh-agent`
ssh-add ~/.ssh/id_rsa
ちなみに、MacOSの場合ssh-addに「-K(大文字)」オプションが使えて、何度も設定しなくてよいそうです。(Macを持っていないので未確認)
ssh-add -K ~/.ssh/id_rsa
また、ほかにも方法がありそうだったり、そもそもサーバに秘密鍵置きっぱなしにするのはどうなの?みたいな問題があるようですが、チュートリアルを実施するだけなら問題ないと考えます。
気づいたらheroku コマンドが使えない
よし、pushもできたし、次はherokuに新しいアプリをデプロイするぞ!
:
$ heroku create
bash: heroku: command not found
今度はお前か!
herokuも同様に、ターミナルが変われば設定は残っていません。
対処法
先に対処法を記載します。
ターミナル起動時にPATHが自動設定されるようにします。
$ vi ~/.bashrc
# 以下をファイルの最後に追記
PATH=/usr/local/heroku/bin:$PATH
# こちらの記載でも可
source $HOME/.profile > /dev/null
なぜなの?
最初にやったこのコマンドじゃダメなの?
source <(curl -sL https://cdn.learnenough.com/heroku_install)
と、思うかもしれません。
このコマンドでもherokuコマンドは使えるようにはなりますが、毎回無駄な処理を実行することになります。
https://cdn.learnenough.com/heroku_install
の中身を見てみると、こんな風になっています。
curl -OL https://cli-assets.heroku.com/heroku-linux-x64.tar.gz
tar zxf heroku-linux-x64.tar.gz && rm -f heroku-linux-x64.tar.gz
sudo mv heroku /usr/local
echo 'PATH=/usr/local/heroku/bin:$PATH' >> $HOME/.profile
source $HOME/.profile > /dev/null
1~3行目でherokuに必要なファイルを取得して、/usr/localフォルダに移動しています。
4行目では$HOME/.profileファイルにPATHを通すような記載を追記して
5行目で$HOME/.profileを実行することで、herokuコマンドを使えるようにしています。
つまり、herokuコマンドが見つからない状態でも
ec2-user:~/environment $ ls -d /usr/local/heroku
/usr/local/heroku
/usr/local/herokuディレクトリは存在していて、heroku自体は使える状態にあります。
ただherokuがどこにいったかわからなくなっているだけです。
安易に最初のコマンドを実行すると
ec2-user:~/environment (master) $ cat $HOME/.profile
PATH=/usr/local/heroku/bin:$PATH
PATH=/usr/local/heroku/bin:$PATH
PATH=/usr/local/heroku/bin:$PATH
こんな風に何度もPATH設定が書かれることに...
https://wa3.i-3-i.info/word13652.html
によると
PATHを記載している$HOME/.profileファイルは
「ログインシェルがbashで、かつ「.bash_profile」という設定ファイルと「.bash_login」という設定ファイルが無い状態でログインしたときに読み込まれる設定ファイル」
なので「.bash_profile」ファイルがあるcloud9環境では実行されないんですね。
ec2-user:~/environment $ ll ~/.bash*
-rw-rw-r-- 1 ec2-user ec2-user 0 Oct 26 13:30 /home/ec2-user/.bashfile
-rw------- 1 ec2-user ec2-user 7711 Oct 28 14:58 /home/ec2-user/.bash_history
-rw-r--r-- 1 ec2-user ec2-user 18 Aug 30 2017 /home/ec2-user/.bash_logout
-rw-r--r-- 1 ec2-user ec2-user 218 Sep 27 13:18 /home/ec2-user/.bash_profile
-rw-r--r-- 1 ec2-user ec2-user 1484 Oct 27 06:07 /home/ec2-user/.bashrc
-rw-r--r-- 1 ec2-user ec2-user 12288 Oct 26 13:32 /home/ec2-user/.bashrc.swo
それでは、よきRailsチュートリアルライフを!
参考
https://qiita.com/naoki_mochizuki/items/93ee2643a4c6ab0a20f5
https://wa3.i-3-i.info/word13652.html