2

我已配置database.yml为包含“logging_development”作为表示另一个数据库的标签。其中一种模型是使用“建立连接”来使用此“标签”连接到数据库。

我的模型如下所示:

类 AdHistory < ActiveRecord::Base

建立连接“logging_#{RAILS_ENV}”

Rails 服务器在启动并建立模型与相关数据库的连接时工作正常。但是当我启动 ruby​​ 控制台并尝试使用该模型时,它使用“开发”标签database.yml来建立连接。我已经研究了这个问题,但无法找到解决方案。这是该database.yml文件的示例:

development:
  adapter: mysql
  encoding: utf8
  reconnect: true
  database: ad_production
  pool: 5
  username: root
  password: ********
  socket: /tmp/mysql.sock

logging_development:
  adapter: mysql
  encoding: utf8
  reconnect: true
  database: ad_logging
  pool: 5
  username: root
  password: ********
  socket: /tmp/mysql.sock

我正在使用 Ruby 1.8.7 和 Rails 2.3.8

4

2 回答 2

1

我找到了我的问题的答案。问题是我使用的是 Multi_DB gem,它拦截了所有正在执行的 SQL 查询并将这些查询重定向到从数据库。这就是为什么没有针对我在“database.yml”中选择的数据库执行这些查询的原因。一旦 multi_db 连接无效,控制台就会按预期运行。使用“multi_db”gem 的问题之一是它只接受连接名称作为“_slave_database_”。因此,任何与 database.yml 文件中 multi_db gem 的预期名称的偏差都会导致错误,并且不会针对所选数据库执行查询。

于 2013-04-03T18:46:37.803 回答
1

您在运行 rails 控制台时使用过 RAILS_ENV=logging_development 吗?如果不是,你应该这样做,因为默认的 Rails 环境是development. 因此,尝试使用它加载控制台来设置 RAILS_ENV 变量:

RAILS_ENV=logging_development scripts/rails console

于 2013-04-02T19:47:42.517 回答