watchrでファイルの変更検知→自動実行
watchrはファイルを監視して、変更があったら何かしらのタスクを実行出来るスグレモノです。
普段はRubyを使わないので、Ruby入れるところからやったんですが、yum使ったら途中でエラーが出たのでソースから入れるときのメモ。
環境はCentOS5.6です。
Rubyのインストール
ソースはこちらです。(2011/5/22時点で1.9.2)
[root@localhost install]# wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.2-p180.tar.gz [root@localhost install]# tar xzf ruby-1.9.2-p180.tar.gz [root@localhost install]# ls ruby-1.9.2-p180 ruby-1.9.2-p180.tar.gz [root@localhost install]# [root@localhost install]# cd ruby-1.9.2-p180 [root@localhost ruby-1.9.2-p180]# ./configure checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking target system type... i686-pc-linux-gnu checking for gcc... no checking for cc... no checking for cl.exe... no configure: error: in `/root/install/ruby-1.9.2-p180': configure: error: no acceptable C compiler found in $PATH See `config.log' for more details [root@localhost ruby-1.9.2-p180]# yum install gcc # ↑Cコンパイラ(gcc)が無いと出たので [root@localhost ruby-1.9.2-p180]# which gcc # gccがインストールされたことを確認 /usr/bin/gcc [root@localhost ruby-1.9.2-p180]# ./configure # インストール開始 [root@localhost ruby-1.9.2-p180]# make [root@localhost ruby-1.9.2-p180]# make install [root@localhost ruby-1.9.2-p180]# ruby -v # Rubyインストール完了! ruby 1.9.2p180 (2011-02-18 revision 30909) [i686-linux]
RubyGemsのインストール
ソースはこちら。
[root@localhost ruby-1.9.2-p180]# cd ../ [root@localhost install]# wget http://production.cf.rubygems.org/rubygems/rubygems-1.7.2.tgz [root@localhost install]# ls ruby-1.9.2-p180 ruby-1.9.2-p180.tar.gz rubygems-1.7.2.tgz [root@localhost install]# [root@localhost install]# tar xzf rubygems-1.7.2.tgz [root@localhost install]# cd rubygems-1.7.2 [root@localhost rubygems-1.7.2]# ruby setup.rb [root@localhost rubygems-1.7.2]# which gem # gemインストール完了! /usr/local/bin/gem [root@localhost rubygems-1.7.2]#
zlibのロードエラー対応
gemでwatchrをインストールいようとすると、zlibがロードできないと
言われるので、↓
[root@localhost rubygems-1.7.2]# gem install watchr ERROR: Loading command: install (LoadError) no such file to load -- zlib ERROR: While executing gem ... (NameError) uninitialized constant Gem::Commands::InstallCommand [root@localhost rubygems-1.7.2]#
以下の操作をします。
[root@localhost rubygems-1.7.2]# cd ../ [root@localhost install]# cd ruby-1.9.2-p180/ext/zlib # 先ほどのRubyソースを解凍したディレクトリ [root@localhost zlib]# ruby extconf.rb [root@localhost zlib]# make [root@localhost zlib]# make install
watchrのインストール
[root@localhost zlib]# gem install watchr [root@localhost zlib]# watchr -v # watchrインストール完了! watchr version: 0.7
動作確認をしてみます。
[root@localhost ~]# touch hoge.txt [root@localhost ~]# echo "watch( 'hoge.txt' ) {|md| system('echo hoge.txt changed') }" > test.watchr [root@localhost ~]# watchr test.watchr # ここで別のターミナル等で touch hoge.txtすると・・ hoge.txt changed # 変更を検知して、タスクを実行したッ!!
という感じになります。
ちなみに、watchrはコマンドを実行するディレクトリ以下でないと監視しないそうなので、
そこは注意が必要です。