2011-06-08~2011-07-28段階まとめ


この間いろいろなことを学んだので、まとめる価値があります.
主にLinuxシステム管理の仕事をしています.アルバイトで開発の仕事をしました.
主に使用するツール:ssh,shell,ruby,rails
主に開発時の仕事を書きましょう.他のことはまだ終わっていませんが、開発のこれは一段落したと言えるでしょう.オンラインになってからは小さな補修や大きな変更などです.
ところでrails on rubyは本当に敏捷で、敏捷に開発して、とても速いですが、私はこれが好きではありません.それは多くのMagicの方法が存在しています.あなたの仕事を節約して、仕事の効率を高めて、効果的にあなたの仕事を完成することができます.しかし、底辺出身者(ほほほ情報セキュリティ)として、自分が把握していない感じが好きではありません.
railsのプログラムは簡単です
ところで私のIDEは、vim+chromeだけで、他に何もありません.便利で簡潔で、JSPを書くときよりeclipseを使うほうがいいと思います.
1 rails inspector、あなたのプログラムを生成することができて、大体のフレームワークは自動的にあなたにあげて、これはとても便利です.
2単一のクラスを生成したり、直接足場scaffoldを生成したりするのは非常に便利です.もちろん、非常に便利な背後には、足場を使って生成されたwebなど、あなたが決められないものがたくさん含まれています.彼らのrouteは自動的にRESTスタイルに従っています.REST、ええ.よく知らないと彼が大嫌いになりますが、これは確かに非常に優秀な思想、あるいは方法、問題を解決する方法です.ここではRESTについて詳しくお話ししませんが、私も特にわかっていません(自分の手に入らない感じが嫌いです).
3 OK、あなたのwebアプリは今すぐ走ることができて、試してみて~~ruby script/serverはwebrickサーバーを起動して、1種のとても小さくて強くないwebサーバーで、Apacheともちろん比べものになりません.ここでエラーが発生しました.新しいバージョンのrailsにruby script/serverを入力するとエラーになります.私がインストールした理由なのか、他の理由なのか分かりません.エラーが発生しましたbootを見てみました.rbソースコードは、require'rubygems'がロードエラーを起こしたため、プログラムに異常が発生し、後のrescureに捕獲され、一言投げ出されたのかもしれません.何が原因なのか分かりましたが、どうやって直すのか分かりません.私のgemがちゃんと入っているからです.後で偶然試して、直接script/serverを使って意外にも良くて、もちろん新しいシステムは自動的にMongrelサーバーを起動して、これは少し強大です.
4あなたのプログラムを修正することができます.あなたのフレームワークはすでにありますから.
5バックグラウンドでデータを転送する問題で、railsはrenderメソッドを使用してhtmlまたはxmlをレンダリングし、ユーザーが必要とする結果を生成し、ブラウザに戻ります.この感覚はJSPと実はとても考えて、一般的にコントローラの中で1つのクラスの変数があって、この変数はhtmlのerbテンプレートの中で使うことができます.xmlのあの異曲同工は、いくつかのデータをレンダリングして、お客様に返します.
6バックグラウンドページ間のデータ転送、ここでは2つのページ間のデータ転送方法しかできません.ページ間ではまだできません.1つのhtmlページでデータを提出した後、次のページのコントローラでparams[:xxx]を使ってその値をキャプチャすることができますが、今頭が痛いのはこの値が複数のページの間で伝達できないことです.本にはflashやsessionを使う方法しか書かれていませんが、あまりよくないと思います.安全上の問題があり、この方法を使いたくありません.私が今使っている方法は、あるコントローラで生成したデータが別のコントローラでも使用できると思います.また、グローバル変数を使用する方法が好きではありません.そこで、今回生成した結果をデータベースに書き、タグを付けて、別のコントローラに取りに行かせ、対応するタグのデータを削除します.このような生産者-消費者のような問題ですが、データの同期の問題が発生するのは、本当に..もっと良い方法があることを望んでいます.
7 railsのMVCアーキテクチャは、railsのMVCが非常に強く、すべてのプログラムがMVCの理念で書かれていることに注意してください.この点はとても良くて、JSPは少し若くて、自発的にこれを強調していませんが、JSPにも自分の枠組みがあって、私は学んだことがなくて、しばらく言いません.
8最もrailsが好きな点は彼のデータベースの操作で、本当に异常な简洁さで、ASP、JSP、Javaなどのデータベースの接続、データを取るなど私はすべて书いたことがあって、甚だしきに至ってはC言语とC++の私はすべて使ったことがあって、しかしrailsは最も简単で、最も手間が省けます.彼のフレームワークが生成されると、MVCのModelはデータベースのテーブルに直接関連しています.そのModelのクラスは、何も書かなくても、データベースのすべてのものを呼び出すことができます.これがActive Recordの威力ですか.彼の敏捷なところでもある.
9 railsの敏捷さは、彼が多くの補助方法(helper)を持っていることにある.helperを使って何かを書くのは本当に便利だ.例えばJavascriptとかAJAXとか、簡単ですが、Ajaxは相変わらずデバッグしにくいので、少しずつ加算するしかありません.
10 railsのデバッグは、まだ使いやすいので、ブレークポイントを直接debugger関数を加えてscript/server-uでいいです.単歩とかできますが、私はまだよく知られていません.特にページをまたぐデータのデバッグは、心が余裕があって力が足りないように見えます.ほほほ.
11 railsのデータベース移行タスクを褒めて、これは絶対に古典的で、これはとても良くて、各種のデータベースの操作を節約しました.
12これらの解釈言語を褒めて、これらのプラットフォームは性言語に関係なく、最も優位な点は異なる場所に移行して、再びコンパイルして生成する必要がなくて、拷問して直接使って、これはJavaなどcシリーズより優れている場所です.
13 Route,webのルーティングは絶対に不思議なもので,どのようなリクエストがどのようなページに移動し,どのようなURLを生成するか,できなければ,編成するのは本当に骨が折れる.私はできません.特にルートにRESTスタイルを加えると、それはまるで...これは研究に値する分野です.
まだ理解できないことがたくさんあります.
1 params[:xxx]はマルチページ間で値を伝えることができますか?
2符号,@変数,@@変数,一般変数の関係はいったい何なのか.なぜerbテンプレートでは@先頭の変数を使用できますが、通常の変数は使用できませんか?
3 Hashはいったいどんな存在なのか.
4特定の問題は、メールを送るとき、なぜbody:order=>orderの後、erbで@orderを使うことができるのかということです.おかしいですね.
以上は私が把握できないところで、このような感じが好きではありません.できるだけ早く理解してください.
===================================================================================================================================
以上の以外に、私はまたいくつかshellのスクリプトを書いて、これも初めて書いて、ほほほ、多くのawkを使って、それを貼ることができて、1つのバックアップで、自分で後で自分で勉強します.本当に強いものですね.
#!/bin/sh
echo '-----------------------------------------------------'
echo ''
echo '----------------LOG MIGRATION BEGIN------------------'
echo ''
echo '----------------used in xxxxxxxxxxx-------------------'
echo ''
echo '----------------designed by xxxxxxx--------------------'
echo ''
echo '-----------------------------------------------------'
LOGPATH=$2
SQLDIR='sqlRes'
SQLPATH='../'${SQLDIR}
if [ -d ${SQLPATH} ]
then
   echo 'The directory already exists.'
else
   echo 'Making a new directory...' 
   mkdir ${SQLPATH}
fi
DATETIME=`date +"%F"`
SQLFILE=${SQLPATH}/${DATETIME}.sql
TMPFILE1=${SQLFILE}.tmp1
TMPFILE2=${SQLFILE}.tmp2
TMPFILE3=${SQLFILE}.tmp3
TMPFILE4=${SQLFILE}.tmp4
TMPFILE5=${SQLFILE}.tmp5
TMPFILE6=${SQLFILE}.tmp6
TMPFILE7=${SQLFILE}.tmp7
touch ${SQLFILE} ${TMPFILE1} ${TMPFILE2} ${TMPFILE3} ${TMPFILE4} ${TMPFILE5} ${TMPFILE6} ${TMPFILE7} 
echo 'Now I have a very new file to store SQL lines.'
echo ''
echo 'constructing ...'
awk '{ printf "%s\"%s\"%s\"%s
",$1,$2,$3,$4 }' ${LOGPATH} | tee ${TMPFILE1} awk '{ print $5" "$6 }' ${LOGPATH} | awk '{ gsub(/ /, ":"); print $0}' | awk -F: '{ gsub(/:/, "/"); print $0 }' | awk -F/ '{ if ($2 ~ /Jul/) gsub($2,"07"); print $3"-"$2"-"$1"\""$4"\""$5"\""$6"\""$7 }' | sed 's/\[//g' | sed 's/\]//g' | tee ${TMPFILE7} awk -F\" '{ printf "%s
",$2 }' ${LOGPATH} | awk 'gsub(/ /,"\"") {print $0}' | awk -F\" '{ if ($2 ~ /^.*\?/) { gsub(/\?/,"\""); print $0; } else printf "%s\"%s\"\"%s
",$1,$2,$3; }' | tee ${TMPFILE2} awk '{ printf "%s\"%s
",$10,$11 }' ${LOGPATH} | tee ${TMPFILE3} awk -F\" '{ printf "%s\"%s
",$4,$6 }' ${LOGPATH} | tee ${TMPFILE4} paste -d\" ${TMPFILE1} ${TMPFILE7} ${TMPFILE2} ${TMPFILE3} ${TMPFILE4} | tee ${TMPFILE5} awk -F\" '{ printf "INSERT INTO accesslogs (respon_time, host_ip, other, logname, tdate, thour, tminute, tsecond, tzone, action, url, param, http_version, code, bytes, refererquot, uaquot, ttime, business) VALUES(%d, \"%s\", \"%s\", \"%s\", \"%s\", %d, %d, %d, %d, \"%s\", \"%s\", \"%s\", \"%s\", %d, %d, \"%s\", \"%s\", \"%s\", \"%s\" );
",$1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17,$5$6$7$8, BUSINESS }' BUSINESS="${1}" ${TMPFILE5} | tee ${TMPFILE6} sed '1i\use inspector;' ${TMPFILE6} > ${SQLFILE} echo '--------------------clean tmp files------------------------' echo '' rm -rf ${TMPFILE1} rm -rf ${TMPFILE2} rm -rf ${TMPFILE3} rm -rf ${TMPFILE4} rm -rf ${TMPFILE5} rm -rf ${TMPFILE6} rm -rf ${TMPFILE7} echo '-------------------export global variable------------------' echo '' export SQLFILE echo '-----------------------------------------------------------' echo '' echo '-----------------SQL lines for LOG generated!--------------' echo '' echo '-----------------waiting for migration---------------------'
#!/bin/sh
echo '-----------------------------------------------------------'
echo ''
echo '--------------------migrating------------------------------'
echo ''
echo '-----------------------------------------------------------'
mysql -uxxxxxxxx -pxxxxxxxxxxxx -h xxxx -P 3306 < ${SQLFILE}
echo '--------------------clean global variable------------------'
echo ''
export SQLFILE=''
echo '-----------------------Done.-------------------------------'
echo ''
echo '---------------LOG MIGRATION END---------------------------'
#!/bin/sh
PWD="/xxxxx/logMigration/migrate"
LOGS_PATH=${PWD}/../logs
YESTERDAY=`date -d yesterday +"%F"`
echo "Yesterday is ${YESTERDAY}"
for sys in `ls ${LOGS_PATH}`
do
        echo "Handling system ${sys}, start..."
        sleep 1
        for tlog in `ls -t ${LOGS_PATH}/${sys}`
        do
                nametmp=`echo ${tlog} | cut -d\. -f3`
                if [ ${YESTERDAY} == ${nametmp} ]
                then
                        echo "Filename matchs date very well, it's time to migrate now."
                        sleep 1
                        # PAssing 2 params, the first is system name, the second is file name.
                        source migrate1.sh ${sys} ${LOGS_PATH}/${sys}/${tlog}
                        source migrate2.sh
                else
                        echo "What's the matter? The latest file doesn't match the date, system panic!"
                        sleep 1
                fi

                break #no matter when, the inner loop only executes once time.
        done
done

以上の主な役割は、ログを必要なスタイルに分割し、データベースにdumpすることです.ふふ~
==================================================================================================================================
いい指令をいくつか学んだ
du -sh XXX
scp XX XX@XX:XXXX
およびsecureCRTに使用されるszとrz
あなたのデータベースの中でミグデータベースの大きさを知りたいですか?/var/mysqlに入り、そのディレクトリにduというコマンドを使用すればいいです.
dateコマンドは本当に強くて、2011-07-28のこのようなフォーマットを生成して、直接date+“%F”でいいです.昨日の日付を知りたいなら、date-d yesterdayです.
n日前:date-d'3 days ago
これだけでなく、pythonの本も買いました.rubyよりもpythonのほうが多くて、MITの公開授業と一緒に勉強するのはいいですね.