我正在尝试在我的rails4应用程序中建立与外部CRM数据库(MySQL)的连接。我可以通过控制台连接到数据库,我可以使用MySQL2 gem直接连接和查询使用这种方法:
connection = Mysql2::Client.new(host:11.12.14.14,username...)
results = connection.query("SELECT * FROM.....")
但是,我对如何最好地实现和重用此连接感到困惑。我担心连接池和打开太多连接......通过研究这个主题我发现了很多关于使用模型的信息......所以我设置了一个抽象模型,并将数据库连接信息放在我的database.yml中/ p>
class ExternalCrm < ActiveRecord::Base
# No corresponding table in the DB.
self.abstract_class = true
establish_connection(:external_crm)
def self.getCustomerId(first_name, last_name)
get = connection.select_one("SELECT * FROM customers WHERE First_Name=#{connection.quote(first_name)} AND Last_Name=#{connection.quote(last_name)}")
get.id
end
end
这个工作......我可以运行这个方法但为什么我必须调用连接ExternalCrm.connection.select_one()而不是直接说ExternalCrm.find_by_sql()...也是,每次都会调用连接使用池还是会导致连接问题过多?
我需要运行的大多数查询只是大的原始SQL语句,所以我真的不需要activerecord和每个表的模型。所以我不确定使用抽象模型是否是最好的方法......
我的目标是建立连接,然后能够运行连接方法...例如 ExternalCrm.getUserId(firstname,lastname)
实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
重用连接。
你已经在课堂上结束了,因此连接将一直保持开放状态,这是一个很好的方法,多个连接的问题不用担心。
如果你正在处理多个ExternalCrm
连接的表格,你还没有指定,如果不是
self.table_name = 'customers'
可以轻松访问类ExternalCrm
以使用任何方法。比如,
ExternalCrm.getUserId(firstname,lastname)
如果表格正在变化,您可以通过表格互动完成每个连接的重置, 与
方法
查看我的blog了解更多信息。