2015年2月25日水曜日

webサーバを並列化しているとき、各サーバのログを一括でgrepするShell。

/tmp/log_dir/#{host名} 下にそれぞれ複数の.gz化されたlogファイルを置き、
host毎に検索し、該当行を"#{host名}-#{検索対象文字列}".csvに書き出す というシェルプログラムを作った。

今回はnginxのaccess_logからスマホのUAで特定のURLへアクセスしているリクエストのログを抽出する。


#!/bin/bash


log_dir="/tmp/log_dir"
hosts=("zetton01" "zetton02" )
uris=("/login/" "/news/" "/todays/special/")

for host in ${hosts[@]}
do
read_dir="${log_dir}/${host}"
for uri in ${uris[@]}
do
dum=`echo $uri | sed -e "s/\//-/g"`
outfile="${host}_${dum}.csv"

echo $read_dir
echo $uri
zcat $read_dir/*.gz | grep "http://#{mydomain}${uri}" | grep "iPhone\|Android" > $outfile
done
done

2015年2月19日木曜日

【Rails】 pdfをダウンロードさせたり、ブラウザで開かせる方法

pdfをDLさせるには飛び先のactionの最後で


send_data #{pdfデータ(バイナリ)}, filename: "#{ダウンロード時のファイル名}.pdf"

とする。

DLでなくブラウザ内で開く(プレビュー)にするなら、

send_data #{pdfデータ(バイナリ)}, type: "application/pdf", disposition: 'inline'

とする。

2015年2月18日水曜日

Screenで起動してからエスケープ文字を変更する方法

Screenのエスケープ文字のデフォルトはCtrl+a だが、職場ではCtrl+tにする人が多い。共有ユーザーの.screenrcもCtrl+tにしてあるが、僕はCtrl+aになれてしまったので。

:escape ^Aa

2015年2月16日月曜日

【Sinatra】 開発環境でwebサーバ起動

binstubsオプションでbundleしているという前提で、以下のコマンドで起動。(3000番ポート指定の場合)

$ bin/rackup -p 3000 -o 0.0.0.0

2015年2月15日日曜日

Sinatra GET bootstrap.css.map 404 (Not Found)の対応

SinatraでWebサイトを開発中。

ブラウザのconsoleに、
  • Uncaught Error: Bootstrap's JavaScript requires jQuery
  • GET http://#{mysite-url}/stylesheets/bootstrap.css.map 404 (Not Found)

の2つのエラーがでている。bootstrapはインストール済みで画面は問題なくみれているが、
1つ目はbootstrapが使うjqueryがないということ。jqueryのサイトから最新版をDLして、js置き場のassets/javascripts/jquery-2.1.3.js として保存。app.rbのassets節には



assets do
serve '/javascripts', from: 'assets/javascripts'
serve '/stylesheets', from: 'assets/stylesheets'

js :application, [
'/javascripts/jquery*.js',
'/javascripts/*.js'
]

として、jqueryが先に読まれるようにして解決。
Railsだと専用のgem jquery-railsがあるが、sinatraではそういうのないっぽいなぁ。webサーバもつどrestartしないとjs読んでくれなかった。

2つめはbootstrapの.mapがないといっている。
bootstrapはDLしたフォルダごと assets/javascripts下にありmapファイルも入っているが.mapは読み込まれない模様。public/stylesyeets/bootstrap.css.map -> ../../assets/bootstrap/css/bootstrap.css.map とシンボリックリンクを張って解決。