A Day in the Life

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/cho45/20061024/1161662101

http://subtech.g.hatena.ne.jp/keyworddiary/gerry

から URL 抽出して cho45/20061024 を切り取ってグラフに投げればできそう。

なんかすぐ書ける気がしてきたので書いてみた[それPla]五分で書けたすばらしい。

subtech_gerry_cho45

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 かぁ。へぇ。

記事の一覧 >