繁体   English   中英

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

[英]Custom database connections in Rails application

我正在开发一个使用单个 PostgreSQL 数据库存储数据的 Rails 应用程序。 但是,在应用程序的某些部分,我使用 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 在控制器中#action

没有连接到服务器

此错误发生在以下行:

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

我究竟做错了什么?

将配置保存在一个地方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.github.io/multiple-database.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM