FC2ブログ

徒然さめざめ

思ったことを思ったときに思ったように

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

December

12/04
D.Gray-man 19

12/09
碧海のAiON 4

12/18
最上の命医 8

12/22
×××HOLiC 16
鋼の錬金術師 24
ながされて藍蘭島 16

12/25
セキレイ 9
黒神 13

12/26
文学少女と美味しい噺(レシピ)  1
朝霧の巫女 6

スポンサーサイト

apacheのProxy Errorが出たあと復帰までの時間を設定する

mongrel+apache(proxy)なんてのを使用していると、
mongrelを再起動するタイミングでhttpアクセスがあると、
ProxyErrorが起こりしばらく接続できなくなる。

これはApache側がproxy先へのconnection poolを持っていて
接続できなくなるとretryを行うまでは接続確認せずにdisconnectを返すためである。

そこをできるだけ早く retry の間隔を短くできないか?というのが今回のお話。

結論から言うと、
ProxyPass ディレクティブ に retry=x(sec) で設定してやるといい。

http://www.hku.nl/manual/ja/mod/mod_proxy.html#proxypass

最初バランサ関係のパラメータだと思ってスルーしてたけど、これでいけるみたい。

これで、mongrelの再起動を起こしやすくなったぞ。(ぉ

testで定数の書き換え

テストのとき、定数を再代入した時のwarningを止めたい by 田舎Ruby親方
http://d.hatena.ne.jp/xibbar/20091126/1259216726

> Rubyに定数を再代入すると、warningが出ます。

> (あたりまえというか、本来は定数は代入できない)

> ですが、テストのために代入したいという場合があります。

まさにそんなケースがあったので。

コネクションプールのconnectionsを消すには

気になって調べてみたっていうかソースを見れば書いてあった。

disconnect!

# Disconnects all connections in the pool, and clears the pool.
def disconnect!
@reserved_connections.each do |name,conn|
checkin conn
end
@reserved_connections = {}
@connections.each do |conn|
conn.disconnect!
end
@connections = []
end

とか
clear_reloadable_connections!

# Clears the cache which maps classes
def clear_reloadable_connections!
@reserved_connections.each do |name, conn|
checkin conn
end
@reserved_connections = {}
@connections.each do |conn|
conn.disconnect! if conn.requires_reloading?
end
@connections = []
end

を使うといい。
続きを読む

rails と connection pool とついでに スレッド と

rails2.2以降に connection pool が組み込まれたわけだが、
いまいちどこにも関係性を示した情報がない。

というかスレッド使用時にpoolが枯渇してしまうという問題がでた。

なので、がっつり調べてみた。

実態は以下のファイルなので
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.4/lib/active_record/connection_adapters/abstract/connection_pool.rb
これに標準出力するものをいれて確認してみた。


@@ -64,6 +64,7 @@
#
# The default ConnectionPool maximum size is 5.
def initialize(spec)
+ pp caller
@spec = spec

# The cache of reserved connections mapped to threads
@@ -179,6 +180,9 @@
# - ConnectionTimeoutError: no connection can be obtained from the pool
# within the timeout period.
def checkout
+ puts "checkout"
+ puts @size
+ puts @connections.size
# Checkout an available connection
@connection_mutex.synchronize do
loop do
続きを読む

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。