git rm --cachedした後、他の人が除外commitをgit pullしたときにファイルが消える
概要
emacs .gitignore
git rm --cached file
git commit -m "ignore file"
の後に自分のファイルは残っている。 誰かがこのcommitをpullすると、その人は除外したファイルが消える。
当たり前?
除外commitにファイルの削除が含まれているので当たり前かもしれない。 commitした人自身の環境でも、除外commit以前に戻し、その後除外commitをまたいでpullすると削除される。
要は、消えないで残るのは除外commit後をpullする時。
除外するファイルをバックアップ取っておいて、git除外後に再配置するという原始的な方法で保つことにした。
ISUCON7 予選に参加しました
10/21(土)に、チーム爆アドというチーム名にて、earshttpというハンドルネームで参加させていただきました。
予選概要
予選合計参加者数
- 合計 407組、1132名
10月21日(土)
- 204組 , 577名
- 一般 173組 [2名:28組 , 3名:145組]
- 学生 31組 [2名:5組 , 3名:26組)
10月22日(日)
- 203組 , 559名
- 一般 165組 [2名:44組,3名:121組]
- 学生 38組 [2名:6組,3名:32組]
総合順位
- 145位 26,759点
課題内容
課題はチャットシステムでした。 3台のubuntuサーバ(APPx2、DBx1)を使い、高速化するものでした。
修正内容
当日お腹の調子が悪く、メンバー二人は某所で集まり、自分は自宅から参加しました。 連携方法がチャットしかなかったので、一人で走る感じになってしまいました。
言語はRubyを使用しました。
netdataの導入
やってもらいました。
SQLの見直し
- select文の取得カラムの見直し
- Indexの貼り直し
- レコード取得数の見直し
MySQLのチューニング
知識がなかったので調べながら使用メモリ量のチューニング
Nginxのチューニング
やろうとしたけど知識がなさすぎて手が回りませんでした。
はまったところ
進めていくと、/icons取得時に500エラーが大量に発生するようになりました。 /iconsはDBに入っている画像データをAppが書き出す形になっており、netdataで見るとDBサーバのCPUが張り付いていました。
画像をファイルに書き出してNginxに良しなにしてもらおう、ということは思いつきましたが、私用の都合で途中抜けしたため、時間が足りずにタイムアップ。 18時時点で25000点ほどで離脱しました。 その後メンバーにミドルウェアのチューニングをお願いし、27659点を記録しました。
感想
人生初のプログラミングコンテストでしたが、0点でした、と書かずに済んでホッとしています。
開始時レギュレーションを一切読まずに進めたため、pythonからrubyへの切り替えができずにあたふたしました。 レギュレーションは必ず読むことにします。
また、リモート参加は慣れていないと意思疎通が難しいので、お腹を壊さないようにしようと思います。(:3 」∠ )_
来年も参加します。 お疲れ様でした〜
Ansible 1.9以降のansible.cfgでhostfileを定義すると怒られる
概要
Ansible 2.4.0.0のansible.cfgで、
hostfile = ./hosts
みたいに書いていると、以下のエラーが出力されplaybookを実行できない
[DEPRECATION WARNING]: [defaults]hostfile option, The key is misleading as it can also be a list of hosts, a directory or a list of paths . This feature
will be removed in version 2.8. Deprecation warnings can be disabled by setting deprecation_warnings=False in ansible.cfg.
[WARNING]: Could not match supplied host pattern, ignoring: all
[WARNING]: provided hosts list is empty, only localhost is available
解決策
hostfile = ./hosts
↓
inventory = ./hosts
参考
1.9から変更されている模様
おまけ
hostfile自体は/etc/ansible/hostsに定義されていて、ここに書けばグローバルで使用できるっぽい
Vagrantゲスト同士でSSHできるようにする
経緯
WindowsでAnsibleを使いたかったので、VagrantでAnsible用VMを立ててそこからplaybookを流す
vagrant-host-shellを導入
$ vagrant plugin install vagrant-host-shell
insert_keyをfalseにする
Vagrant.configure("2") do |config|
.......
box = "ubuntu/trusty64"
vagrant.vm.box = box
config.ssh.insert_key = false
vagrant.vm.network "private_network", ip: "192.168.33.254"
# IPを設定しておく
.........
scpでAnsible用ゲストOSにprivate_keyをぶん投げる
config.vm.provision :host_shell do |host_shell|
host_shell.inline = 'scp -i ~/.vagrant.d/insecure_private_key -o "StrictHostKeyChecking no" ~/.vagrant.d/insecure_private_key vagrant@192.168.33.254:/home/vagrant/.ssh/id_rsa'
end
vagrant.vm.provision "shell", inline: <<-SHELL
chmod 600 /home/vagrant/.ssh/id_rsa
SHELL
end
所感
手動でぶち込むのは避けられたはず... まだWindowsで動作確認はしていないが、insecure_private_keyの場所が違うくらいしか引っかかる場所は無い気がする
追記
Windowsで試したところ、scpがうまくいかなかった(cygwin使用)
ので、cpでvagrantフォルダ内に移動させてmv&chmod。
config.vm.provision :host_shell do |host_shell|
host_shell.inline = 'cp ../../.vagrant.d/insecure_private_key ./insecure_private_key'
end
vagrant.vm.provision "shell", inline: <<-SHELL
set -e
mv /vagrant/insecure_private_key /home/vagrant/.ssh/id_rsa
chmod 600 /home/vagrant/.ssh/id_rsa
SHELL
end
Vagrantfileを複数ファイルへ分割する
参考サイト
子Vagrant的な使い方
./Vagrantfile
Vagrant.configure("2") do |config|
config.ssh.insert_key = false
config.vm.define "ansible-main" do |vagrant|
box = "ubuntu/trusty64"
vagrant.vm.box = box
vagrant.vm.network "private_network", ip: "192.168.33.254"
vagrant.vm.network :forwarded_port, id: "ssh", guest: 22, host: 22254
vagrant.vm.synced_folder "./ansible", "/home/vagrant/ansible"
vagrant.vm.provider "virtualbox" do |vb|
vb.memory = "768"
end
end
load "./vagrant/test/Vagrantfile" if File.exist?("./vagrant/test/Vagrantfile")
load "./vagrant/test2/Vagrantfile" if File.exist?("./vagrant/test2/Vagrantfile")
./vagrant/test/Vagrantfile
Vagrant.configure("2") do |config|
config.ssh.insert_key = false
config.vm.define "test" do |vagrant|
box = "ubuntu/trusty64"
vagrant.vm.box = box
vagrant.vm.network "private_network", ip: "192.168.33.15"
vagrant.vm.network :forwarded_port, id: "ssh", guest: 22, host: 22015
vagrant.vm.provider "virtualbox" do |vb|
vb.memory = "768"
end
vagrant.vm.provision "shell", inline: <<-SHELL
set -e
apt-get update
SHELL
end
end
所感
vagrantをまとめて管理できるようになって便利