Ruby on rails ActiveRecord::Base.build\u连接连接到错误的数据库
我创建了一个连接到2个数据库的类:Ruby on rails ActiveRecord::Base.build\u连接连接到错误的数据库,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我创建了一个连接到2个数据库的类: class Production < ActiveRecord::Base ActiveRecord::Base.establish_connection(:production) self.abstract_class = true attr_accessor end class Backup < ActiveRecord::Base ActiveRecord::Base.establish_connection(:backup
class Production < ActiveRecord::Base
ActiveRecord::Base.establish_connection(:production)
self.abstract_class = true
attr_accessor
end
class Backup < ActiveRecord::Base
ActiveRecord::Base.establish_connection(:backup)
self.abstract_class = true
attr_accessor
end
class RepairReport
def init
end
def repair_now
Production.table_name = "users"
users = Production.all
users.each do |user|
puts "USER: #{user.last_name}"
end
end
end
当我运行此命令时,它会给出一个错误:ActiveRecord::AdapterNotSpecified:“未配置生产”数据库。可用:[“开发”、“测试”]
当我将database.yml
更改为development
和test
时,它可以工作,但输出的用户来自另一个本地Rails应用程序中使用的另一个数据库。看来旧的连接仍处于活动状态?如何确保连接了正确的数据库
更新:
这是我现在更新的数据库.yml
和代码(见下文),但它仍然连接到错误的数据库。当我删除development
和test
部分时,它返回:ActiveRecord::AdapterNotSpecified:“development”数据库未配置。可用:[“开发产品”、“开发备份”]
,因此它似乎正在读取正确的数据库.yml
development:
adapter: postgresql
encoding: unicode
database: test_eagle_development
host: localhost
pool: 296
username: postgres
password: password1
template: template0
test:
adapter: postgresql
encoding: unicode
database: test_eagle_test
host: localhost
pool: 5
username: postgres
password: password1
template: template0
development_prod:
adapter: postgresql
encoding: unicode
database: test_eagle_development
host: localhost
pool: 296
username: postgres
password: password1
template: template0
development_backup:
adapter: postgresql
encoding: unicode
database: test_eagle_test
host: localhost
pool: 5
username: postgres
password: password1
template: template0
和代码:
class Production < ActiveRecord::Base
ActiveRecord::Base.establish_connection("#{Rails.env}_prod".to_sym)
self.abstract_class = true
attr_accessor
end
class Backup < ActiveRecord::Base
ActiveRecord::Base.establish_connection("#{Rails.env}_backup".to_sym)
self.abstract_class = true
attr_accessor
end
类产品
看起来您正在以开发模式运行rails应用程序。
默认情况下,rails尝试通过rails\u ENV
value加载数据库配置并获取连接详细信息
我建议命名到两个匹配环境的连接:
开发:
适配器:postgresql
编码:unicode
数据库:test_eagle_开发
主机:本地主机
游泳池:296
用户名:postgres
密码:password1
模板:template0
开发和备份:
适配器:postgresql
编码:unicode
数据库:test\u eagle\u test
主机:本地主机
游泳池:5
用户名:postgres
密码:password1
模板:template0
类产品
看起来您正在以开发模式运行rails应用程序。
默认情况下,rails尝试通过rails\u ENV
value加载数据库配置并获取连接详细信息
我建议命名到两个匹配环境的连接:
开发:
适配器:postgresql
编码:unicode
数据库:test_eagle_开发
主机:本地主机
游泳池:296
用户名:postgres
密码:password1
模板:template0
开发和备份:
适配器:postgresql
编码:unicode
数据库:test\u eagle\u test
主机:本地主机
游泳池:5
用户名:postgres
密码:password1
模板:template0
类产品
必须是建立连接(:生产)
而不是ActiveRecord::Base。建立连接(:生产)
必须调用每个特定类的:build\u connection
方法,而不是调用父类ActiveRecord::Base
。配置父类没有意义)它必须是建立连接(:生产)
而不是ActiveRecord::Base。建立连接(:生产)
必须调用每个特定类的:build\u connection
方法,而不是调用父类ActiveRecord::Base
。配置父类没有意义)您可以尝试这个“#{Rails.env}_备份”。to#symI做了,但它仍然从错误的数据库返回数据,请参阅我的更新问题。您可以尝试这个“#{Rails.env}_备份”。to#symI做了,但它仍然从错误的数据库返回数据,请看我的最新问题。如果可以的话,我会给你们两个评分,所以我不得不选择。他在连接中使用Rails.env
的解决方案帮助很大,他可以使用更多的积分。但问题不在于根据环境建立正确的连接,而在于正确的连接配置!你的代码没有如你所期望的那样工作,我说明了问题所在。另一个答案与您的问题无关当您显式地指定连接名称(正如您所做的那样)时,它是哪个环境并不重要。所以使用Rails.env
并不能解决您的问题,它只是使您能够根据环境选择连接。最初的问题是“为什么设置的配置实际上不起作用”。如果可以的话,我会给你们两个评分,所以我不得不选择。他在连接中使用Rails.env
的解决方案帮助很大,他可以使用更多的积分。但问题不在于根据环境建立正确的连接,而在于正确的连接配置!你的代码没有如你所期望的那样工作,我说明了问题所在。另一个答案与您的问题无关当您显式地指定连接名称(正如您所做的那样)时,它是哪个环境并不重要。所以使用Rails.env
并不能解决您的问题,它只是使您能够根据环境选择连接。最初的问题是“为什么设置的配置实际上不起作用”。
class Production < ActiveRecord::Base
ActiveRecord::Base.establish_connection("#{Rails.env}_prod".to_sym)
self.abstract_class = true
attr_accessor
end
class Backup < ActiveRecord::Base
ActiveRecord::Base.establish_connection("#{Rails.env}_backup".to_sym)
self.abstract_class = true
attr_accessor
end