【问题标题】:How do I pull data from a dual database in Rails (Postgresql and SQL Server)如何从 Rails 中的双数据库(Postgresql 和 SQL Server)中提取数据
【发布时间】:2017-08-03 23:23:14
【问题描述】:

我最初只使用一个数据库,但我需要将客户端添加到另一个数据库,即 SQL Server 数据库。我能够连接,但我遇到了一些问题。

原始完整数据库.yml

development:
  adapter: postgresql
  database: martin_development
  username: *******
  password: *******
  pool: 5
  timeout: 5000

development_sec:
  adapter: sqlserver
  host: *******
  port: 1433
  database: Database1
  username: *******
  password: *******

我收到以下错误:

TinyTds::Error(数据库“DATABASE1”不存在。确保名称输入正确。)

如果我取出数据库名称,它看起来像这样:

development_sec:
      adapter: sqlserver
      host: *******
      port: 1433
      database:
      username: *******
      password: *******

一切似乎都运行正常,我没有收到任何关于找不到数据库的错误消息。但是,该数据库确实存在于客户端。

我对如何从我的客户 SQL Server 数据库中提取数据感到困惑。我正在尝试使用我找到的一些资源,因此到目前为止我的项目文件看起来像这样:

模型(Mssql.rb)

class MssqlBase < ActiveRecord::Base
  establish_connection :development_sec
  self.abstract_class = true
end

模型(site.rb)

class Site < MssqlBase


end

控制器(sites_controller.rb)

class SitesController < ApplicationController
  def index

      @sites = Site.all
      @hash = Gmaps4rails.build_markers(@sites) do |site, marker|
      marker.lat site.latitude
      marker.lng site.longitude

    end
  end


end

数据库.yml

development:
      adapter: postgresql
      database: martin_development
      username: *******
      password: *******
      pool: 5
      timeout: 5000

development_sec:
      adapter: sqlserver
      host: *******
      port: 1433
      database:
      username: *******
      password: *******

我的目标是开始从数据库中提取数据,但到目前为止,就我的文件而言,我收到以下错误:

ActiveRecord::StatementInvalid(TinyTds::Error: Invalid object name 'sites'.: SELECT [sites].* FROM [sites]):

所以只是回顾一下,我需要它从“DATABASE1”中读取,但它说它不存在。当我出于某种原因将其遗漏时,它正在与服务器连接,但我不知道哪个数据库。现在我正在尝试提取数据但收到无效的语句。任何帮助将不胜感激。

【问题讨论】:

  • 您连接到哪个版本的 MSSQL?以及您使用什么宝石来连接。据我所知,你不能像 MySQL 那样在没有安装适配器的情况下进行设置。
  • 我正在使用 tiny-tds gem 和 activerecord -sqlserver-adapter。它的版本是2008 r2。
  • 你可以尝试使用 irb 连接:require 'rubygems';require 'tiny_tds';client = TinyTds::Client.new :username =&gt; '*******', :password =&gt; '*****', :host =&gt; 'host_url'; 显然用你的信息替换用户名、密码和主机 URL。
  • 这是我收到的消息 => #<:client:0x00564a1d9c8ed0>:hash, :symbolize_keys=>false, :cache_rows=>true, :timezone= >:local, :empty_sets=>true}>
  • 看来 Tiny TDS 正在创建连接。当您执行此类故障排除时,我建议您编辑您的问题并在原始帖子的底部添加您尝试过的内容和结果。这样人们就不必通读所有这些 cmets 来找出您尝试过的内容。

标签: ruby-on-rails sql-server ruby database tiny-tds


【解决方案1】:

你可以用 Rails 做到这一点。

创建此方法。

def with_connection(database, &block)
  ActiveRecord::Base.establish_connection(database)
  yield
  ActiveRecord::Base.establish_connection
end

它会更改您的应用程序连接到的数据库,运行查询,然后将其恢复为默认值。不确定线程​​是否安全。单独使用establish_connection,不会恢复为原始状态(因为您的应用一次只能连接到一个数据库)

然后使用:

with_connection :development_sec do
  MssqlBase.first # will call development_sec database
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 2014-04-09
    • 2015-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    相关资源
    最近更新 更多