建立连接不适用于Ruby控制台

时间:2013-04-02 19:44:05

标签: ruby-on-rails ruby

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

我的模型看起来像这样:

类AdHistory<的ActiveRecord ::基

establish_connection“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

2 个答案:

答案 0 :(得分:1)

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

RAILS_ENV=logging_development scripts/rails console

答案 1 :(得分:0)

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