Rails应用程序中的自定义数据库连接

时间:2014-12-24 09:30:57

标签: ruby-on-rails database postgresql

我正在开发一个Rails应用程序,该应用程序使用单个PostgreSQL数据库作为其数据。但是,在应用程序的某些部分,我使用WordNet - 英语的NLP数据库。由于NLP分析消耗了大量资源,因此我将其放在单独的PostgreSQL实例中的不同服务器上,因此它不会消耗我的Web服务器资源。对于未来,我也在考虑扩展这个数据库,但这是一个不同的故事。无论如何,通过这种配置,我有两个服务器和两个数据库:Rails用于其模型的数据库,第二个数据库 - 具有大量数据的NLP数据库。

我的问题是: Rails应用程序中的确切应该与NLP数据库建立连接吗?目前,我已将它放在我的config / environments / *。rb文件中,它看起来像这样:

config.wordnet_connection = PG::Connection.new(host:'hostname',dbname:'dbname',user:'username',password:'password')

现在,在控制器中,当我需要访问NLP数据库时,我使用以下代码:

conn = Rails.application.config.wordnet_connection
conn.exec(sql)

然而,当我将应用程序部署到我的生产服务器(使用nginx + phusion乘客)时,有时我从控制器收到一条错误消息,试图从wordnet_connection获取一些数据:

  

控制器#动作中的PG :: UnableToSend

     

没有与服务器的连接

此错误发生在以下行:

res = Rails.application.config.wordnet_connection.exec(sql)

我做错了什么?

1 个答案:

答案 0 :(得分:0)

将配置保留在一个地方database.yml

production:
  adapter: postgresql
  other stuff...

wordnet_connection:
  adapter: postgresql
  other stuff..

other_envs:
.....

然后创建一个类

class WordnetConnection < ActiveRecord::Base
  establish_connection(:wordnet_connection)
  self.table_name = "your_table"
end

然后您可以像

一样访问
WordnetConnection.first 

我认为这可以保持备用数据库连接打开,这对性能也是一件好事,同时也允许你使用AR

在此处查看我的博客http://imnithin.weebly.com/multiple-dbs-in-rails.html