Dojo を Custom Build してみる

Dojo を使用しているサイトがあるんですけど
初期表示の際の Dojo 部分が遅いなあと常々思っていて
なにか改善策はないものかと調べていたら
Custom Build したら早くなる疑惑が浮上しました


参照ページはここ↓
なんか IBM のサイト
本家サイト


ちょっとやってみたかんじでは
既に通常版で作っちゃったものに対して
あとから Custom Build した Dojo Toolkit を使うとなると
Dojo によって作成される html が
Custom Build or not でちょっと違ってきちゃうので
そのへんの調整がめんどうでした


具体的にどんなふうにやったかは、またあとで詳しく書いてみます
まあ参照ページ通りなんですけどね。。汗

CentOS 5.2 に rails 環境を構築する

構築したい環境は以下です

Ruby 1.8.6
Rails 2.0.2
thin 1.0.0

使用する DB は MySQL ですが、こちらは既存のものを使用します



★ おもむろに ruby

# yum install ruby ruby-devel rdoc irb

とやってみたら、ruby 1.8.5 がくる。。
なんだかこの yum のパッケージではこれが最新みたいだったので
仕方なくソースで ruby をいれました

# cd /usr/local/src/
# wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.gz
# tar zxvf ruby-1.8.6.tar.gz
# cd ruby-1.8.6
# ./configure

そしたら途中で

configure: error: no acceptable C compiler found in $PATH

と怒られたので、gcc をインストール

# yum install gcc


さて、再開です
※ console 使いたいなら readline 入れるべし(日記の最後参照)

# ./configure
# make
# make install

インストールできた!
と思って ruby -v をやってみるものの、動かない。。


そういえばパスを通してあげねば

# cd ~/
# vi .bash_profile

ここの PATH に /usr/local/bin/ruby を追加して

# source .bash_profile
# ruby -v

これで表示されれば OK



★ gem

次いで rails たちをいれるために gem をいれたのですが、
これもソースから入れました
バージョンはとりあえず 0.9.4

# cd /usr/local/src/
# wget http://rubyforge.org/frs/download.php/20989/rubygems-0.9.4.tgz
# tar zxvf rubygems-0.9.4.tgz
# cd rubygems-0.9.4
# ruby setup.rb

そしたら、

no such file to load -- zlib (LoadError)

と怒られたので
zlib やら zlib-devel かなと思っていれてみたけどやっぱりだめ


どうやら ruby 用のやつが必要だったみたいです

# cd /usr/local/src/ruby-1.8.6/ext/zlib/
# ruby extconf.rb --with-zlib-include=/usr/include --with-zlib-lib=/usr/lib
# make
# make install


入れ終わったところでおもむろに再開

# cd /usr/local/src/rubygems-0.9.4
# ruby setup.rb

今度は入ったみたいです

# gem -v

で表示されれば OK です


rails

# gem install rails -v=2.0.2

一緒に入ってくる rake 0.8.3 は微妙そうな予感がするので
0.7.3 あたりにしておく

# gem install rake -v=0.7.3
# gem uninstall rake -v=0.8.3


★ thin

# gem install thin

g++ がないらしい怒られかたをしたので

# yum install gcc-c++

完了後に thin を入れ直して成功
ちなみに eventmachine は自分のローカルと同じ 0.12.2 を選択してみました


★ おまけ

subversion からプロジェクトをもってくるために

# yum install subversion

アプリ用ユーザに切り替えて、適当なディレクトリにプロジェクトをチェックアウト
DB 設定やらもろもろ設定したあとに rake db:migrate で

no such file to load -- openssl

と怒られました


これは opessl と同じバージョンの openssl-devel を入れてから
ruby-openssl を入れて解決できるようです
参考にさせていただいたサイトはコチラ


ちなみに、ruby-openssl が入ってない場合は、

# ruby -r openssl -e ""

と入力すると以下のように怒られます

ruby: no such file to load -- openssl (LoadError)


・まず、openssl のバージョンを確認

# rpm -qa | grep openssl

結果↓

openssl-0.9.8b-10.el5_2.1


・表示された openssl と同じバージョンの openssl-devel をインストール

# yum install openssl-devel-0.9.8b-10.el5_2.1


ruby の OpenSSL 拡張

# cd /usr/local/src/ruby-1.8.6/ext/openssl/
# ruby extconf.rb
# make
# make install

インストールが完了すれば

# ruby -r openssl -e ""

と入力してももう怒られません



とりあえずこんなかんじで構築完了?



後に console 使おうとしたら

no such file to load -- readline (LoadError)

と怒られてしまうはめに。。


ruby を install するときに、

./configure --with-install-readline

とやっておくべきらしい


それか、readline-devel の入れ忘れとかとあわせて
あとから入れ直すときは

# cd /usr/src/ruby-1.8.6/ext/readline
# ruby extconf.rb
# make
# make install

これで大丈夫らしい

How to kill a [ruby] process.

mongrel が暴走してるとき

$ top 

の右上のほうを見ると、zombie なプロセスがいたりします


そこで、

$ pstree -p

を見ると、mongrel_rails のプロセスに
怪しい ruby のプロセスがついてたりします


おもむろに括弧内のプロセス番号で怪しい ruby プロセスを確認

$ ps aux | grep [プロセス番号]


結果、[ruby] なプロセスだったらゾンビ発見です
defunct プロセスの親である、mongrel のプロセスを kill しましょう

$ kill -9 [ゾンビな mongrel のプロセス番号]


でもきっと単純に mongrel の再起動でも解決する。。



ちなみに、これでも defunct の親プロセスを確認できます

$ ps -ef --forest | less

postgresql の sequence

なぜだかわからないけれど、テスト環境のデータベースで
あるテーブルたちの sequence の last_value がずれて
insert 時にエラーが出てました

# select setval('テーブル名_id_seq',(select max(id) from テーブル名));

とりあえずこれして last_value を正しく直しました


なんだか、max(id) よりも last_value の値のほうが小さいという
変なずれかたでした


なんでずれたんだろう。。

postgresql 一覧表示いろいろ

index 一覧の表示のさせかたがわからなくて
調べたとこに載ってた一覧表示法たち

コマンド 機能
\d オブジェクト一覧
\dt テーブル一覧
\dv View一覧
\di Index一覧
\d テーブル名 指定したテーブルの列を表示
\z 各オブジェクトに対するユーザの権限の一覧

return false する

before_filterrenderredirect_to する処理に入ったとき、
そのあとかかる before_filter でも同様の処理があると
double render error になっちゃったりします


そんなときは、renderredirect_to のあとに
return false をつけてあげればいいらしいです
そうすると、あとの before_filter がかからず済みます


なるほどね