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はコマンドを実行するディレクトリ以下でないと監視しないそうなので、
そこは注意が必要です。