rails4でGithubからEC2にCapistrano3でデプロイする時、大苦戦
$ bundle exec cap production deploy
これが悪夢の始まり
1.ご挨拶の構文エラー
まず導入したばかりのAtom氏も御立腹の構文エラー。
見事に「'」が一個たりないですな。
garlicboys TONE RIVER JAM'10_02 - YouTube
2.ec2-user以外に作ったデプロイ用ユーザに、sshキーを追加忘れ
$ sudo cp -arp /home/ec2-user/.ssh /home/デプロイ用ユーザ/
3.capistranoはsshキーを理解できない盆暗殿
DEBUG [6b087c62] Command: ( RBENV_ROOT=~/.rbenv RBENV_VERSION=2.2.0 GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/yoshidaagri/git-ssh.sh /usr/bin/env git ls-remote -h git@github.com:yoshidaagri/yoshidaagri.git )
DEBUG [6b087c62] Permission denied (publickey).
DEBUG [6b087c62] fatal: Could not read from remote repository.
DEBUG [6b087c62]
DEBUG [6b087c62] Please make sure you have the correct access rights
DEBUG [6b087c62] and the repository exists.
DEBUG [6b087c62] Finished in 1.671 seconds with exit status 128 (failed).
どうも、ローカルから以下のコマンドでクリアできる。
$ssh-add
Identity added: /Users/user_name/.ssh/id_rsa (/Users/user_naame/.ssh/id_rsa)
4.権限不足
`/var/www/my_app/shared' を作成できません: 許可がありません
これはroot権限でフォルダほったらかしにしている自らの怠慢...
権限をデプロイユーザにchownして、権限を実行権限と書き込み権限を与えて終了
5.mysqlへ接続できないです
DEBUG [3779b8f7] rake aborted!
DEBUG [3779b8f7] Mysql2::Error: Can't connect to MySQL server
1.EC2にDBを同居させる場合、database.ymlのproduction節,hostはlocalhostとしなければならない。EC2に限った事ではない。
6.mysqlのユーザが見当たらないです。passはあってるけど
その後、mysqlに事前に作っていたproduction用のuser hostをlocalhostにしておくこと.
7.デプロイは成功
INFO [16140426] Finished in 0.193 seconds with exit status 0 (successful).
アプリのパスに成果物がUPされているかも確認...
deploy.rbのset :deploy_toで指定したディレクトリのcurrentフォルダにある。
relesesディレクトリには過去5回のdeploy結果が残っている。おー。
ひとまずゴール。次はEC2で構築したアプリが外部から参照できるのか確認。
books review 4/100 新版 雑兵物語
戦国時代、活躍した武将の活躍には、必ず雑兵有り。
この本は、司馬遼小説等で伝えられる著名な大名、豪傑、智将は全く登場しない。
代わりに戦力としての、もしくは防具もまともにつけていない荷駄としての雑兵30名が登場する。
その雑兵の言葉を借りながら、戦争のルール、心構えを語り継ぐのがこの本。
「皆心を一つにして、槍の穂先を合わせ、拍子を合わせて、敵を槍の上からたたきなされい」「鉄砲でぶっ叩いたら」「二十日鼠で遊んで騒いでいたら、敵襲と間違えて大混乱潰走」「人は右から攻められるとと防ぎにくいもんだ」等、実戦から得た教訓を分かりやすく訳されている。。
また、作者は江戸時代初期の高崎城主 松平信興とされている(諸説あり)。雑兵が「翁から聞いた」と例え話をし、作者が雑兵で例え話をする2重さは、かの荘子に通ずる部分が感じられる。
この本は雑兵物語前編後編と、雑兵物語を理解するための図解があり、この図解が心憎いほどの便利である。
江
江戸においては、太平の世になり戦を知らない武士階級におけるマニュアルとなり、現代においては、歴史に思いをはせる上での、戦場における基礎知識のマニュアルである。
books review 3/100 小さなチーム、大きな仕事〔完全版〕: 37シグナルズ成功の法則
考え方の柔軟性を試される本である
この本は、自己啓発本とか経営の方法を学ぶ本とか、明確な目的もない。
37signalsの書だが、スタートアップ時に好まれるRuby on Railsを語る本でもない。
枠にはまらない考え方のツボが散りばめられた本で、この本を読んで目から鱗の小生は、考え方が硬いなと反省しきりである。
具体的には、「機能は小さく、buttonは最小限」「大きくせず、小さくして勝負」「短い時間で作業する」「大企業のように形から入らない」等である。
この本に書かれた考え方は、37signalsで実際に作業の現場に落とされて実践されているものであり、説得力もあり納得感も高い。
著者は米国人であり、その考え方に日本人としてギャップが出る事を危惧しながら読み進めていた。幸い私はそのギャップは発生しなかった。但し、中小企業に適用する事すら難しいぐらいに、我々日本の現場には、この「右向き左」の処方は刺激が強すぎる感がした。
それぐらい発想を変えてしまえば、今の状況を打破出来るのだよ、その逆はすべからく、と著者が囁く本である。
rails4でGithubにpushする時に大苦戦
1.getgubの使い方を見て真似ていた所、error発生。
githubは前々からLibraryの質問等で使っていたものの、railsアプリをpushすることが無かった。今回初めてpushしようとしたら大苦戦したの巻。
このサイトが、情報は古いものの、簡潔明快であったために参考にする。
最後、以下のコマンドをポチっと...あれ
$ git push origin master
error: failed to push some refs to 'https://github.com/XXXX/YYYY.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
--help見てなんとかしてくれ的な、非常に納得のいかないerror。
2.これは兄貴御立腹です。
GARLICBOYS "兄貴御立腹" - YouTube
3.対策は作業用ブランチを一度かますこと(初回だけ)
git branch temp1 git checkout temp1
temp1というブランチを作成する。
git pull origin +master:temp1
この時点でoriginからファイルがすっぽり消えるけど、落ち着いて作業
git diff temp1 master
temp1とmasterを比較する。全くもって不毛な作業。
git checkout master
git marge temp1
temp1からmasterにmergeする作業。意味なし。
この後pushすると行けるようになる。何故なんだろう。
$ git push origin master
4.なぜブランチを初回だけかます必要があるのが、git不勉強につき不明です。
御指南ご鞭撻を宜しくお願いします。
他に参考にしたサイト
3.AWS EC2 AMI作成後、ローカルからEC2にログイン、ユーザ作成、必要な準備(rails4)
3-1.ローカルからログイン
$ chmod 400 XXXXXXXX.pem
$ ssh -i XXXXXXXX.pem ec2-user@44.66.44.99
XXXXXXXXはEC2マネージャで設定したキーの名前
@の後はEC2マネージャのinstanceで表示される「Public IP」
3-2.ユーザ作成
ec2-userというのが初期ユーザだが、初期ユーザを使うのはナンセンス。
学生時代Vine Linuxインストール何回も繰り返した時とやることは一緒。別途ユーザを作成する事はセキュリティの観点から見て基本の基。
「rootを使い続けるからhackされるんだよ」と先輩からの熱い御折檻が蘇ります。
$ sudo su -
(AMIはroot初期パスワードがありません。恐ろしや)
#passwd
(ここでroot権限のパスワードを設定します。)
#adduser hogera
#passwd hogera
#exit
$ su - hogera
(これでsudo権限ユーザにチェンジしました。)
3-3.必要なもののインストール
$sudo yum update
途中、「なんMBもあるけどダウンロードしましょうかね?」と聞かれるのでyを入力、先に進める。
$ sudo yum install -y gcc-c++ readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel git
明日はruby周りの環境を作成することとします。
この後がちょっと複雑なんだなぁ...gemでなまった小生は、ここで焦ると痛い目に合いそう。