ruby(rails) 程序如何 连接 各种远程数据库?

Python012

ruby(rails) 程序如何 连接 各种远程数据库?,第1张

在使用Cookie.find等操作的时候,就会连接到database.yml中monitor_spider配置的数据库上操作。以前一直都这么用,没发现什么不妥。最近一个项目,由于启动的进程比较多,老是碰到数据库连接池链接获取超时的错误。

通过MySQL Client用命令:show processlist发现数据库连接数量一直居高不下,轻轻松松就上2k+的连接。通过读Rails框架的connection_pool.rb文件代码,发现在各模型中用establish_connection连接数据库会造成很大的问题。文件中类ConnectionHandler的establish_connection方法代码如下:Ruby代码 def establish_connection(name, spec) @connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec) end def establish_connection(name, spec)

@connection_pools[name] = ConnectionAdapters::ConnectionPool.new(spec)

执行SQL语句

require "dbi"

dbh = DBI.connect("DBI:ODBC:#{db_name}",@user,@password)

sth = dbh.execute(%%1)

提取单条记录

# @database is array of references to anonymous hashes

@database = (

{ name =>"Wild Ginger",

city =>"Seattle",

cuisine =>"Asian Thai Chinese Korean Japanese",

expense =>4,

music =>"\0",

meals =>"lunch dinner",

view =>"\0",

smoking =>"\0",

parking =>"validated",

rating=>4,

payment =>"MC VISA AMEX",

},

# { ... }, etc.

)

sub findRestaurants {

my ($database, $query) = @_

return grep {

$query->{city} ?

lc($query->{city}) eq lc($_->{city}) : 1

and $query->{cuisine} ?

$_->{cuisine} =~ /$query->{cuisine}/i : 1

and $query->{min_expense} ?

$_->{expense} >= $query->{min_expense} : 1

and $query->{max_expense} ?

$_->{expense} <= $query->{max_expense} : 1

and $query->{music} ? $_->{music} : 1

and $query->{music_type} ?

$_->{music} =~ /$query->{music_type}/i : 1

and $query->{meals} ?

$_->{meals} =~ /$query->{meals}/i : 1

and $query->{view} ? $_->{view} : 1

and $query->{smoking} ? $_->{smoking} : 1

and $query->{parking} ? $_->{parking} : 1

and $query->{min_rating} ?

$_->{rating} >= $query->{min_rating} : 1

and $query->{max_rating} ?

$_->{rating} <= $query->{max_rating} : 1

and $query->{payment} ?

$_->{payment} =~ /$query->{payment}/i : 1

} @$database

}