我正在开发一个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)
我做错了什么?
答案 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