2006-10-24
mongrel_rails を screen で restart させる
たぶん全国300万人の rails developer のひとが使っていると思われる development 環境での mongrel_rails start によるサーバ起動。
rails は割と優れたクラスの autoload/reload 機能により、あまりサーバの再起動は必要ないのだけど、様々な理由により手動で restart させたいときが出てくる。そんなときは mongrel が動いてるシェル開いて ^C で落として履歴からもう一度 mongrel_rails start というのが定石なのだが大変めんどくさい。./script/server とかはことさらめんどくさい(起動遅いし)。
しかしながら mongrel_rails は USR2 シグナルを送ると自動で再起動してくれる。ので screen からシグナルを送ってやれば、どのコンソール開いていても C-t C-r とかで mongrel の restart が可能になるのである。
という妄想を抱いたので早速実践してみたら割とかなり便利な…!
.screenrc
# reload mongrel
bind 'r' exec !.. pkill -USR2 -f mongrel_rails
bind '^R' exec !.. pkill -USR2 -f mongrel_rails
gerry graph
日記に gerry って書くとグラフ化するのがほしい。
http://subtech.g.hatena.ne.jp/keyworddiary/gerry
から URL 抽出して cho45/20061024 を切り取ってグラフに投げればできそう。
なんかすぐ書ける気がしてきたので書いてみた[それPla]五分で書けたすばらしい。
require 'rubygems'
require 'hatena/api/graph'
require 'scrapi'
links = Scraper.define do
process "a[href]", "urls[]"=>"@href"
result :urls
end.scrape(URI.parse('http://subtech.g.hatena.ne.jp/keyworddiary/gerry'))
links = links.grep(%r[^/.+/\d{8}$]).map {|link| link.split('/')[1..2]}
graph_api = Hatena::API::Graph.new('secondlife', passwd)
links.each do |username, timestamp|
graph_api.post("subtech_gerry_#{username}", Time.parse(timestamp), 1)
end
test 時に sqlite3 のオンメモリーDBを使う
んー。テスト30個ぐらいじゃオンメモリのほうが 5~10% 高速だなぁ。問題は今後スキーマがでかくなって、テスト個数が増えた時だなぁ。test な db を shm において、db:test:prepare しろ、つー話もあるな。
ていうか model で mysql の方言書くようになったら shm + mysql が一番いい気もしてきた。
あと
http://topfunky.net/svn/plugins/memory_test_fix/
の memory_test_fix プラギンだけど、毎回 stdout にメッセージが出ていやんなので、
if in_memory_database?
silence_stream(STDOUT) {
puts "Creating sqlite in memory database"
load "#{RAILS_ROOT}/db/schema.rb" # use db agnostic schema by default
}
end
しといた。
rails で Comment クラスが作れなかった件
すげぇはまった。結果 rails は悪くなかった。一瞬でも疑ったDHHスマンカッタ。
結局利用していた text-hatena の utils/htmlsplit.rb だけ namespece が区切られて無くて、Comment が定義されてしまっていた、という。なので module の namespace に閉じこめて Text::Hatena から include して解決。それにしても htmlsplit.rb は namespace がかぶりそうな class が定義されていて危険だ。
というわけで ruby の namespace には割と結構コンフリクトが起きて危険な香り…。今は割とライブラリが使う namespace は一つになってきてる気がしてるので安心、な気もするけど。他人の作った module の namespace に class とかを定義するとき、 global な namespace のを空間を呼び出すときは :: の何とかセパレータを頭に付けるのがわりと癖になってきている。
↑ごちゃごちゃしていて何かいているかわかんねーよ、と思った俺。
rails.vim の svn に含まれる Rakefile
http://svn.tpope.net/rails/vim/railsvim/
で vim の .vba 形式のファイル作ってたりして面白い。あと
task :publish => [:zip,:vimball] do
Rake::SshFilePublisher.new("tpope.us","/var/www",".","rails.zip","rails.vba").upload
end
で publish かぁ。へぇ。