首页 > 解决方案 > ActiveRecord 连接需要重置?

问题描述

生产模式下的应用程序正在按预期返回内容。假设它正在连接到配置的数据库。文件database.yml如下

default: &default
  adapter: postgresql
  user: deploy
  password: 888xxx888xxx
  schema_search_path: public
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: 5
  timeout: 10000

development:
  <<: *default
  database: fort_development

  <<: *default
  database: fort_test

production:
  <<: *default
  database: fort_production

但是,当通过控制台连接到数据库时,无论是在开发中(数据库不存在)还是在生产中,控制台都连接到错误的数据库。它还引用了从 database.yml 文件中删除的用户名(应用程序随后重新启动)。

myapp注意:曾经在 yml 文件中为该属性引用了该字符串schema_search_path,但它是一个注释掉的行(无法确定它是否曾经被激活。'

> bundle exec rails c
irb(main):001:0> ActiveRecord::Base.connection_config
=> {:adapter=>"postgresql", :user=>"deploy", :password=>"888xxx888xxx", :schema_search_path=>"public", :pool=>5, :timeout=>10000, :database=>"myapp", :username=>"deploy", :host=>"127.0.0.1"}
> bundle exec rails c production
irb(main):001:0> ActiveRecord::Base.connection_config
=> {:adapter=>"postgresql", :user=>"deploy", :password=>"888xxx888xxx", :schema_search_path=>"public", :pool=>5, :timeout=>10000, :database=>"myapp", :username=>"deploy", :host=>"127.0.0.1"}

控制台和应用程序不同步。什么可以使控制台使用不同的值以及如何重置它以使用正确的配置数据?

标签: ruby-on-railspostgresqlconsole

解决方案


对于任何偶然发现这一点的人,rake 可以在另一个地方获取通过 ActiveRecord 连接的指令。

.rbenv-vars

应用程序目录中的此文件被错误地设置为:

DATABASE_URL=postgresql://deploy:PASSWORD@127.0.0.1/myapp

另一个潜在的问题来源(不清楚为什么文件在 yaml 中正确解析)是让 database.yml 文件仅引用生产环境

production:
  adapter: postgresql
  database: fort_production
  password: [...]
  pool: 5
  schema_search_path: public
  timeout: 10000
  user: deploy

推荐阅读