2012-05-29
Asset Pipeline とはいったい…
英語は人よりできないので日本語の資料読んでから本家のドキュメントよんだ。
- まずここ(日本語)
[Rails]Asset Pipelineとはなんなのか調べてみた | Fujitaiju Blog -There is no border in the Internet!-
- つぎにここ(日本語)
ASCIIcasts - “Episode 279 - Asset Pipelineを理解する”
- そしてここ(英語)
Ruby on Rails Guides: Asset Pipeline
とりあえず、Asset Pipeline の守備範囲はいまんとこ、ローカルの開発中のプロジェクトで開発したら以下の様な感じでした。
/app/assets/images /app/assets/javascripts /app/assets/stylesheets /vendor/assets/stylesheets /vendor/bundle/ruby/1.9.1/gems/jquery-rails-X.X.X/vendor/assets/javascripts /vendor/bundle/ruby/1.9.1/gems/coffee-rails-X.X.X/lib/assets/javascripts
どこが対象になっているか確認したい場合は、対象の rails プロジェクトの root ディレクトリから、bundle exec rails console して、Rails.application.config.assets.paths を発射すれば確認できると思うよ!
2012-05-18
2012-05-09
Pound のリダイレクトの扱い
Pound ちゃんのリダイレクトのお話。パラメータ引き継げるのと引き継げないのがある。
Service HeadRequire "Host: www.example.com" Redirect "http://redirect.example.com" END 例) http://www.example.com/example -> http://redirect.example.com/example
Service HeadRequire "Host: www.example.com" Redirect "http://redirect.example.com/" END 例) http://www.example.com/example -> http://redirect.example.com/
man pound で redirect のところに書いてあるの見つけなかったらやばかった。
2012-05-03
NAS 領域の CIFS をアンマウントした時の動作
俺様Memo |
NAS 側から強制的に切り離す(共有解除)すると、
- 所有者情報やら size が全部 ? になって ls しても「そのようなデバイスやアドレスはありません」になる(即座にエラーが返される)。
- マウントしっぱだからタイムアウトまで待つとかじゃなくてアクセス即時エラー返してくれる、意外と親切。
なんらかの理由でハングアップして、CIFS VFS のエラーとしてカーネルに通知されると
- echo 0 > /proc/sys/kernel/hung_task_timeout_secs” disables this message.
- /proc/sys/kernel/hung_task_timeout_secs に記述された数値秒だけ待ってくれる、超過するとタイムアウト(デフォルト 120 秒)。
- マウントポイントを(再帰的に)含む位置から ls とか発行すると、hung_task_timeout_secs 秒数分待たされ地獄。
- dmesg にエラーが出る。
普通に umount コマンドを発行すると、
- マウント先が動作しているかどうかにかかわらずマウント解除されて、ただのマウントポイント跡地になる。
というわけで、ファイル名変換を考えなくてよかったので CIFS 使ってましたが、サーバと NAS でエンコード合わせてなるべく NFS 使うようにします。
追記
そもそも CIFS VFS がカーネルに通知されるレベルでぶっ壊れるのがおかしいので、普通に CIFS 使えばいいだろってレベルだった。
マウントポイント以下にマルチバイト文字が
- 含まれる可能性があるなら CIFS
- 含まれる可能性がないなら NFS
と使いわけよう。
Freshclam の rc スクリプト
ClamAV 0.97.4/14872 で確認。
./configure --prefix=/usr/local でインストールして、pid ファイル設置先を /var/run/clamav/ として設定した場合、RHEL 系なら以下のスクリプトで動くはずです。configtest は、freshclam にないっぽいから諦めた。
#!/bin/sh # # Freshclam. # # chkconfig: - 85 15 # description: Freshclam is update virus databases for clamav; # processname: freshclam # config: /usr/local/etc/freshclam.conf # pidfile: /var/run/clamav/freshclam.pid # Source function library. . /etc/rc.d/init.d/functions freshclam="/usr/local/bin/freshclam" prog=$(basename $freshclam) FRESHCLAM_CONF_FILE="/usr/local/etc/freshclam.conf" lockfile=/var/lock/subsys/freshclam start() { [ -x $freshclam ] || exit 5 [ -f $FRESHCLAM_CONF_FILE ] || exit 6 echo -n $"Starting $prog: " daemon $freshclam -d --config-file=$FRESHCLAM_CONF_FILE retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc $prog -QUIT retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { stop sleep 1 start } rh_status() { status $prog } rh_status_q() { rh_status >/dev/null 2>&1 } case "$1" in start) rh_status_q && exit 0 $1 ;; stop) rh_status_q || exit 0 $1 ;; restart|configtest) $1 ;; status) rh_status ;; *) echo $"Usage: $0 {start|stop|status|restart|}" exit 2 esac
2012-05-01
Pound で IP sticky な環境作っててハマった
仕方ないと言えば仕方ないんだけどこの仕様なんとかできねーかな、ってレベル。アプリケーションでやれよクズ!って言われたらそれまでなんだけど。
(前略) Alive 30 (中略) Service HeadRequire "Host: www.example.com" BackEnd Address 192.168.1.11 Port 80 TimeOut 60 End BackEnd Address 192.168.1.12 Port 80 TimeOut 60 End Session Type IP TTL 600 End End (後略)
こんな感じで、Session に Type IP を書いておくと、IP による静的振り分けを行うようになります。簡単に言っちゃうと、
- 192.168.1.100 のパソコンが、.1.11 or .1.12 のサーバにアクセスする
- 192.168.1.100 のパソコンは、1 でアクセスしたサーバにだけアクセスするよう IP ベースで関連付けられる
- アイドル時間(サーバにアクセスしなかった時間)が 600 秒を超えると、セッションを破棄して、1 に戻る
基本ですな。これを行わない場合、たとえばログイン周りのセッション管理で、バランシングされてるサーバ間で物理的にセッション共有(NAS とかで)してないと、サーバまたいで繊維しちゃって、ログインしている状態が失われたりすます。
んでこの場合、.1.11 か .1.12 どちらか死んだ時、Alive の秒数だけ経過したら、片方のホストに振られて片肺運転になると思うじゃん?じゃん?実際には IP で判断してるから、死んだサーバ側に TTL の秒数経過するまでアクセスされ続けて延々死んだ画面見るハメになる。たぶん TTL 更新病数経過する前に、アクティブな接続繰り返すとずっとダウンしたホスト見続けると思う(試した限りではそうだった)。
Session の記述コメントアウトしたら別の鯖に振られたのでよくやく原因が分かったんだけど、Session 句はバックエンドの動作状況を顧みないのかね……。

