Rails应用程序中,我有这样的代码在纯Ruby:仅在一个块中建立到另一个数据库的连接?
class LinkCreator
attr_accessor :animal
def initialize(animal:)
@animal = animal
end
def call
"something#{link_id}"
end
private
def link_id
connection.execute(sql_request).first.first
end
def sql_request
"SELECT field FROM table WHERE field_id = '#{field_id}' LIMIT 1"
end
def field_id
animal.field_id
end
def connection
ActiveRecord::Base.establish_connection(
adapter: "mysql",
host: ENV["MYSQL_HOST"],
username: ENV["MYSQL_USERNAME"],
password: ENV["MYSQL_PASSWORD"],
database: ENV["MYSQL_DB_NAME"]
).connection
end
end
正如你所看到的,这不是一个模型,但只有一个简单的类。问题在于,activerecord的连接被更改,其他请求将在新连接上执行。
是否可以仅在一个块中建立连接并返回到旧连接。我知道我可以建立另一个连接,但这对性能来说非常糟糕。
这里最重要的区别在于连接被比其他的对象进行所有普通对象的基类 - 因此可以单独保留与普通对象的连接。这也将配置保存在一个共同的地方,我认为可以保持备用数据库连接的开放,这对于性能来说可能是一件好事,这取决于您的使用条件。 – DGM 2014-10-26 15:14:25