キャッシュの制御
CSSやjavascriptなど外部のファイルを読み込むとき
ファイルは更新したのにキャッシュのせいで更新が反映されない。
そういう時は
<script src="../js/jquery/test.js?ver=1.0"></script>
ってやればいいらしい
ver=数字 を更新すれば、キャッシュから読み込まずサーバから取得
逆に同じにしておけば、キャッシュの内容が適用される
キャッシュの制御が可能なようです。
ワイルドカードの範囲
ワイルドカードを使った置換方法がうまくいかない。(失敗談のみ)
受付番号「○○○○」番号
この文の○○○○の部分をDBから取得した数値に置換したい。
けれど↑の文字は文章の一部であって、複数出てきます。
受付番号「○○○○」番号のお客様
振込が完了致しましたのでご連絡致します。
受付番号「○○○○」番号のお客様には多大なるご迷惑を御掛け致しました。
こんな感じのテンプレートがあります。
だからテンプレート文章をString型で保持して
String stg = テンプレの文章;
String no = 取得した番号;
stg.replaceAll( "受付番号「.*」番号", "受付番号「"+no+"」番号" );
で置き換えようと思ったのですが。。。
「.*」 では
受付番号「○○○○」番号のお客様
振込が完了致しましたのでご連絡致します。
受付番号「○○○○」番号のお客様には多大なるご迷惑を御掛け致しました。
赤い部分までヒットしてしまい、
置換したくない文字列まで置換されてしまいました…。
はじめにヒットした”受付番号「”から
最後にヒットした”」番号”までが
対象になるようですね。
テンプレートの番号に置き換わる部分が
必ず○○○○とされていれば、
ワイルドカードなど使わずにできたのですが、
テンプレート管理方法がバラバラでこうならず…。
1行に1ワードしか出ないという条件ならば、
改行コードで区切って毎行置換する方法で落ち着く予定です。
しかし、正規表現でどうにかならないものかなぁ。
Submitボタンの二度押し禁止
ボタンを二度押し対策をJavascriptで実装する。
検索すればたくさん出てくるけれど、ここは自分用メモ帳なので書きます。
<script type="text/javascript" language="JavaScript">
<!-- function no2click(form) { var e = form.elements; for (var i = 0; i < e.length; i++) { if (e[i].type == 'submit') { e[i].disabled = true; //disabled属性を有効にしてボタンを無効にする } } } //--> <form action="XXXX.jsp" method="post" onSubmit="return no2click(this)"> <input type="submit" value="送信ボタン">
↑の様なボタンを無効にするのが好みです。
でも業務ではアラートを出すタイプが多かった気がします。
アラートが出るタイプは
<script type="text/javascript" language="JavaScript">
<!-- var cnt = 0; //クリック回数カウント用 function no2click(form) { if( cnt == 0 ){ //初クリックでは必ずここを通る cnt = 1; //カウント数更新 } else { //2度目以上 alert('二重クリック禁止です。'); return false; } } //--> <form action="XXXX.jsp" method="post" onSubmit="return no2click(this)"> <input type="submit" value="送信ボタン">
こんな感じです。
どちらが親切なのかはよくわかりません。
別サーバでの検索、ファイルのコピー
Aサーバにあるテキストファイルをfindで検索し、Bサーバにコピーしたい。
find条件についてはコチラ
http://leo029.hatenablog.com/entry/2013/02/09/012920
Aサーバからコマンドを実行する場合は
find /home/Adirectory -maxdepth 1 -name "XXX_*.txt" | xargs -i scp {} $USER_NAME_@$SERVER_IP:コピー先ディレクトリパス
シェルスクリプトを使ってパス無しで実行するとき
パスワードは対話型で回避
expect -c " ## sshでAサーバに入る spawn ssh $USER_NAME_FROM@$SERVER_IP_FROM expect { \"Are you sure you want to continue connecting (yes/no)?\" { send \"yes\r\" expect \"password:\" send \"$PASSWORD_FROM\r\" } \"password:\" { send \"$PASSWORD_FROM\r\" } } ## 結果ファイル名検索・Bサーバへコピー expect \"$ \" { send \" find コピー元パス -maxdepth 1 -name "XXX_*.txt" | xargs -i scp {} $USER_NAME_TO@$SERVER_IP_TO:コピー先リパス \r\" } expect { ## Bサーバのパスワードが必要になる ##(sshでAサーバにいることになってるため) \"Are you sure you want to continue connecting (yes/no)?\" { send \"yes\r\" expect \"password:\" send \"$PASSWORD_TO\r\" } \"password:\" { send \"$PASSWORD_TO\r\" } } expect "
こんな感じ
findコマンドを使って1階層からファイルを探す
Aディレクトリ直下にある「XXX_YYYYMMDD.txt」ファイルのパスが欲しい。
しかし、Aディレクトリ配下には過去の「XXX_YYYYMMDD.txt」を
退避するlogファイルがたくさんある状態。
home
└Adirectory
├XXX_YYYYMMDD.txt
├logFile1
└XXX_20120101.txt
├logFile2
└XXX_20120201.txt
├logFile…
├logFile…
└logFile…
こんな感じ。
普通に find /home/Adirectory -name "XXX_*.txt" で実行すると logファイルに退避されたテキストファイルも取得してしまう。
解決コマンドはこれ find /home/Adirectory -maxdepth 1 -name "XXX_*.txt"
-maxdepth nを使うことで見るディレクトリを絞ることができた。
nを0にするとディレクトリ配下は見ない。 ディレクトリ配下(1階層のみ)なので「-maxdepth 1」
USER_TAB_COLUMNSを使ったOracleDBのテーブル調査
DB①が壊れたのでDB②に①の内容を退避させたが、
テーブル定義が全て正しく退避されているか確認をするため、
USER_TAB_COLUMNSを使って調査を行った。
【基本】
select * from USER_TAB_COLUMNS;
--ユーザがアクセスできる全てのテーブルのカラムが抽出される
【実施したSQL】
SELECT
TABLE_NAME,
COLUMN_NAME,
DATA_TYPE,
DATA_LENGTH,
DATA_PRECISION,
DATA_SCALE,
NULLABLE,
DEFAULT_LENGTH,
DATA_DEFAULT
FROM
USER_TAB_COLUMNS
WHERE
TABLE_NAME IN ('テーブル名','テーブル名',…中略…,'テーブル名')
--テーブル名を制限しないと1000レコード超したため
ORDER BY TABLE_NAME, COLUMN_NAME
--Diffを見やすくするためのorderby
これを①と②で実施し結果を比較した
sshとsedを使って別サーバのファイルの文字列を書き換える
問題:
置換文字列に「;(セミコロン)」がある場合
やりたかったこと
.txtファイルの9行目の文字列を書き換えたかった。
%days = ("21"=>"23"); //常に21と23の数値が入っているわけではない
↓
%days = ("24"=>"25");
こんな感じ
失敗:
spawn ssh $USER_NAME_@$SERVER_IP 'sed -i.bak -e ¥¥¥"9c %days = ("24"=>"25");¥¥¥" 置換対象ファイルパス.txt'
→「;」のせいで複数コマンドがあると思われちゃう
コンソールはこんな感じ
spawn ssh USER_NAME_@SERVER_IP sed -i.bak -e "9c 文字列AAA
invalid command name """
while executing
"¥" 置換対象ファイルパス.txt"
解決策:
セミコロンを文字列として認識する方法がわからなかったので
置換文字列の条件を追加する
(ついでにsshからも1回離してしまった。。。)
expect ¥"$ ¥" { send ¥"sed -i.bak$NOW -e '9s/¥¥¥"..¥¥¥"=>¥¥¥"..¥¥¥"/¥¥¥"24¥¥¥"=>¥¥¥"25¥¥¥"/' 置換対象ファイルパス.txt ¥r¥" }
おまけ:
一列での定義でもできた
spawn ssh $USER_NAME_@$SERVER_IP sed -i.bak$NOW -e '9s/¥¥¥"..¥¥¥"=>¥¥¥"..¥¥¥"/¥¥¥"24¥¥¥"=>¥¥¥"25¥¥¥"/' 置換対象ファイルパス.txt
参考サイトさま
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230879/