Ruby on Rails (プロジェクト作成編)

Project作成

$ rails new blog

JavaScript Runtime

$  vi Gemfile
  gem 'therubyracer', :platform => :ruby
  #を外す

DB作成

$ rake db:create

Post(Model/DB/Controller/URL/View)

・Model作成/DBに反映

$ Rails generate model Post title:string content:text
$ Rails g model Post title:string content:text
$ rake db:migrate


・Controller作成

$ rails g controller Posts

・URL設定

vi config/routes.rb
2行目に追記
  resources :posts


URL確認

$ rake routes
    posts GET    /posts(.:format)          posts#index
          POST   /posts(.:format)          posts#create
 new_post GET    /posts/new(.:format)      posts#new
edit_post GET    /posts/:id/edit(.:format) posts#edit
     post GET    /posts/:id(.:format)      posts#show
          PUT    /posts/:id(.:format)      posts#update
          DELETE /posts/:id(.:format)      posts#destroy

番外編:デバッグ用コマンド

$ rails console
$ rails dbconsole

readlineがないと怒られる。

# yum install readline-devel
$ cd ~/.rvm/src/ruby-1.9.3-p194/ext/readline/
$ ruby extconf.rb
$ make
$ sudo make install


・Viewで使える記法

  • コントローラー内で定義された@変数はそのまま使えます。
  • <% %>のなかではrubyの命令を使える
  • <%= %>は表示させるための命令(Escapeされる)
  • <% # コメント %>

・Controllerにメソッド追加

  • PostController
  • index 一覧 -> app/views/posts/index.html.erb
  • create
  • new
  • edit
  • show
  • update
  • destroy

5年ぶりのRuby on Rails

5年ぶりにRoRWebサービス作成です。さすがに5年経つと色々と便利になってますね。

環境準備

rvm(Ruby Version Manager)は複数のRuby実行環境の管理を簡単にする。

bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
$ rvm install 1.9.3
$ rvm --default 1.9.3
$ rvm list

インストールしてデフォルトに設定


・gemはRubyのライブラリ管理を面倒見てくれる
・rvmのgemsetでRubyに対していくつものgemを管理できる。

$ rvm gemset create rails32
$ rvm gemset list
$ rvm gemset name
$ rvm use ruby-1.9.3-p194@rails32
$ rvm default ruby-1.9.3-p194@rails32

ここでは、rails3.2で使うgemsetを用意

$ gem install rails

Railsインストール

# yum install sqlite-devel
$ gem install sqlite3

SQLLiteインストール

# yum install openssl-devel
$ cd ~/.rvm/src/ruby-1.9.3-p194/ext/openssl/
$ ruby extconf.rb
$ make
$ make install

openssl用意(エラー出たので)

Railsの基本とプロジェクト作成

MVC

Model: データに関する
Veiw:見た目に関する
Controller:ModelとViewをとりもつ
$ cd ~/myapp/
$ new myapp

Railsプロジェクト作成


・ファイル構成

myapp
  ..app
    ..model
    ..view
    ..controller
    ..assets
  ..config
  ..log
  ..db
  ..public
Gemfile


・bundle関連でエラーが出た場合gemfileをいじる。

# yum install gcc-c++
$ vi Gemfile
$ bundle install

gemfileの修正とインストール

$ cd myapp
$ rails server

Railsサーバー起動

サーバーのポート3000にアクセスして起動確認。

scaffoldで試作

$ rails generate scaffold User name name:string email:string intro:string
$ rake db:migrate
$ rake routes

試しにscaffoldで定型作成
http://localhost:3000/user/


昔やった時はgemのmakeでどえらいはまった記憶があるけど今回は、2時間ちょっとで準備完了できました。

CentOS5.2でBOINCインストール

yum install libXcomposite libXdamage

mkdir /usr/local/BOINC
cd /usr/local/BOINC/

wget http://boincdl.ssl.berkeley.edu/dl/boinc_6.2.15_i686-pc-linux-gnu.sh
sh boinc_6.2.15_i686-pc-linux-gnu.sh

cd BOINC/

./boinc

※コンソールをもうひとつ起動
./boinc_cmd --project_attach http://www.worldcommunitygrid.org [WCGのマイプロファイルにあるBOINC アカウント・キー]
./run_client -daemon


※停止したい時
./boinc_cmd --quit

NRPEによるディスク容量の自動監視 Windows & Linux

今までディスク容量のチェックは、Cactiでの目視確認で行っていましたが、
急激な容量増加による障害が発生したため、10分間隔の自動監視設定を行いました。


初め各サーバにお手製スクリプトを置いて、Cronで回す方法を考えましたが、
Windowsサーバも同じように監視することを考え、NagiosのアドオンであるNRPEデーモンに統一することに決めました。

NRPE概要

監視サーバのNagiosからcheck_nrpeプラグイン経由で監視対象サーバのNRPEデーモンに問い合わせを行い、
NRPEデーモンは、別途用意されているNRPEプラグインを呼び出してリソース状況を取得し返します。

[check_nrpeプラグイン]<=>[Nagiosプロセス] ※監視サーバ
↑↓
[NRPEデーモン]<=>[プラグイン]<=>[リソース] ※監視対象サーバ

※監視対象がWindowsの場合も仕組みは変わらず、Windows用の(nrpe_nt)(nrpe_nt plugins)が用意されています。

監視サーバ Nagios側の設定

既にNagiosが設定されていることを前提にNRPE部分だけになります。

NRPEの入手先
  1. http://www.nagios.org/download/download.php
  2. Step 3: Get Addons → [GO]
  3. ライセンス許諾ページ
  4. NRPE2.1.2 → [GO]
NRPEのmake
# cd /usr/local/src/
# tar xvfz tar xvfz nrpe-2.12.tar.gz
# cd nrpe-2.12
# ./configure --enable-command-args
※オプション --enable-command-argsは、監視閾値をNagios側で設定できるようにする。
*
*
*** Configuration summary for nrpe 2.12 03-10-2008 ***:

 General Options:
 -------------------------
 NRPE port:    5666
 NRPE user:    nagios
 NRPE group:   nagios
 Nagios user:  nagios
 Nagios group: nagios

Review the options above for accuracy.  If they look okay,
type 'make all' to compile the NRPE daemon and client.
# make all
*** Compile finished ***

If the NRPE daemon and client compiled without any errors, you
can continue with the installation or upgrade process.

Read the PDF documentation (NRPE.pdf) for information on the next
steps you should take to complete the installation or upgrade.
# cp src/check_nrpe /usr/local/nagios/libexec/
※[check_nrpeプラグイン]をnagiosが使用できるようにコピーしておく。
Nagiosの設定ファイル編集

※監視対象サーバで、nrpe.cfgを編集した後に行う。

/usr/local/nagios/etc/objects/commands.cfgを編集追記

# check nrpe
define command{
        command_name    check_nrpe
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
        }

/usr/local/nagios/etc/objects/services.cfgを編集追記

define service {
        host_name               adsrv.hq.ad.gala.jp
        service_description     Disk check C:
        check_command           check_nrpe!check_disk_C
        contact_groups          admins
        use                     generic-service
}

check_nrpe!check_disk_Cの「check_disk_C」の部分はnrpe.cfgで編集したコマンド名に合わせる

# /etc/init.d/nagios restart

設定反映後、しばらくウェブ画面なりで状況を見守る。

Windows監視対象サーバ側の設定

※動作確認済OS

配置とインストール

2個のフォルダを対象WindowsのC:直下に置く
「nrpe_nt.0.8b-bin」を「nrpe_nt」にリネーム

コマンドプロンプト起動

# cd C:\nrpe_nt\bin
# NRPE_NT -i
NRPE_NT Service sucessfully installed!
NRPEデーモン設定ファイルnrpe.cfgの編集

ここで監視サーバのIPアドレスと監視したいリソースのコマンドを作成します。

・C:\nrpe_nt\binの中のnrpe.cfgをエディタで編集する

allowed_hosts=[監視サーバIPアドレス]
※上記編集
command[check_disk_C]=C:\nrpe_nt plugins\bin\diskspace_nrpe_nt.exe C: 85 90
※最下行追記
※コマンド名(check_disk_C)チェックしたいパーティション(C:)使用容量警告%(85)使用容量クリティカル%(90)
NRPEサービス起動
  1. Windowsの[サービス]を起動
  2. [Nagios Remote Plugin Executor for NT/W2K]を開始

※nrpe.cfgを修正した場合は、都度サービスの再起動が必要。


Linux監視対象サーバ側の設定

※監視サーバでmake済みのnrpe-2.12を各監視対象サーバへコピーしておく

Nagiosユーザ追加

# useradd -d /usr/local/nagios nagios
# passwd nagios

ディレクトリ作成

# mkdir -p /usr/local/nagios/etc
# mkdir -p /usr/local/nagios/bin
# mkdir -p /usr/local/nagios/libexec

・NRPE監視デーモンコピー

# cp /uar/local/src/nrpe-2.12/src/nrpe /usr/local/nagios/bin/

・NRPE設定ファイルコピー

# cp /uar/local/src/nrpe-2.12/sample-config/nrpe.cfg /usr/local/nagios/etc/

Nagiosプラグインをコピー
※監視サーバの/usr/local/nagios/libexec/から各監視対象サーバへコピーしておく

# cp /tmp/libexec/* /usr/local/nagios/libexec/

・NRPE起動スクリプトコピー(Redhat/CentOS) debian/suse別途ファイルあり

# cp /uar/local/src/nrpe-2.12/init-script /etc/rc.d/init.d/nrpe
# chmod 755 /etc/init.d/nrpe

・サーバ起動時設定※CentOSの場合

# cd /etc/rc.d/rc3.d
# ln -s ../init.d/nrpe  S90nrpe
# ln -s ../init.d/nrpe  K90nrpe


ディレクトリオーナー設定

# chown nagios /usr/local/nagios/* -R
NRPEデーモン設定ファイルnrpe.cfgの編集

Windowsの場合と基本同じです。
ここで監視サーバのIPアドレスと監視したいリソースのコマンドを作成します。

・/usr/local/nagios/etc/nrpe.cfgを編集

allowed_hosts=[監視サーバIPアドレス]
※上記編集
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 15% -c 10% -p /dev/hda1
※最下行追記
※コマンド名(check_hda1)チェックしたいパーティション(/dev/hda1)残り容量警告%(15)残り容量クリティカル%(10)
※Windowsの場合と違い、使用容量%ではなく、残り容量%であることに注意。

補足

※NRPEのプラグインでは他にも、CPU/メモリ/ロードアベレージ/プロセス状態/メールキューなど色々設定できます。
※参考にした本

Nagios 2.0オープンソースではじめるシステム&ネットワーク監視

Nagios 2.0オープンソースではじめるシステム&ネットワーク監視

今回はまった箇所

WindowsのNRPTデーモンnrpe_nt.0.7f-binでは、Windows server 2003にて次のエラーが起き値の取得に失敗しました。
http://www.nagiosexchange.org/cgi-bin/page.cgi?g=2153.html;d=1

NRPE_NT:  Error: Exception in handle_connection-packet_Send: -1073741819

そのため、nrpe_nt.0.8b-bin.zipを使用しています。

watchコマンド

プログラムを定期的に更新し、出力をフルスクリーンで表示

オプション

-n (--interval):実行間隔(秒)
-d (--differences):前回と異なっている部分をハイライト
-d=cumulative:実行時から異なっている部分をハイライトし続ける
--no-tatile:1行目ヘッダーと次空行を表示しない

基本

watch -n [実行間隔] "[実行コマンド]"

用途

ポート80番へ接続中の接続元IPを3秒間隔で表示する

watch -n 3 -d "netstat -an |grep :80 |grep ESTABLISHED

httpdプロセスの動作状況を監視する

watch -n 1 -d "ps axufww |grep httpd

eth0ネットワークの通信状況を監視する

watch -n 1 -d "/sbin/ifconfig -eth0

Blue Screen Trap (BugCheck, STOP: 0x000000F4 (0x0000000000000003

突然のブルースクリーン後に再起動がかかるサーバが3台も。いずれも同じ構成。


Server: HP PROLIANT DL360 G5 433527-291
Smart アレイE200 コントローラ
OS: windows server 2003 R2 SP2 STD x64 edition


こんなログが出ていて、

Blue Screen Trap (BugCheck, STOP: 0x000000F4 (0x0000000000000003, 0xFFFFFADF9AE73040, 0xFFFFFADF9AE732A8, 0xFFFFF800013C0FE0))	Operating System	Critical

検索するとHPのフォーラムに同じ悩みを持つ、未解決な人達が居た。
http://forums11.itrc.hp.com/service/forums/questionanswer.do?threadId=1284410


11月6日から今日にかけて5回、いずれも同じ構成の64bitマシン3台で同じ現象が発生。
インストール作業は夏頃だったから、ソフトのアップデートが原因かハードの故障か。
だが、ハードの故障はCDブートからのチェックでは何も異常が出ず。


とりあえず、全てのファームウェアとMSのアップデートを更新して様子見かな。
他にも遭遇してる人がいたら状況を教えてください。

Google Chrome の 0xc0000005  エラー

Symatenc Endpoint Protection 11 が入っていると Google Chromeを起動できないようです。
起動すると、次のようなエラーが表示されます。

アプリケーションを正しく初期化できませんでした (0xc0000005)。
[OK] をクリックしてアプリケーションを終了してください。 

これは、SEPの「SysPlant.sys」ドライバが、アプリケーション制御をしているためです。
次の手順でレジストリを編集することで、「SysPlant.sys」のロードを無効にすることが可能です。

レジストリ編集前はバックアップを取っておくことをお勧めします。

スタート → ファイル名を指定して実行 → 「regedit」実行
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SysPlant
Start:0→4
PC再起動

SysPlant.sysの詳細については、こちらが参考になります。
http://service1.symantec.com/support/inter/entsecurityjapanesekb.nsf/jp_docid/20070930154541949?OpenDocument&dtype=corp

これを無効にすると、アプリケーションの制御や周辺機器の制御ができなくなるため、会社のポリシーに違反するかもしれません。
編集される方は、システム管理者の方に確認されることをお勧めします。