6 mysql postgresql ruby-on-rails multiple-databases
我正在使用active_delegate在Rails中进行多个连接.这里我使用mysql作为master_database用于某些模型,而postgresql用于其他一些模型.
问题是,当我尝试访问mysql模型时,我收到以下错误!堆栈跟踪显示,它仍然使用postgresql适配器来访问我的mysql模型!
RuntimeError: ERROR C42P01 Mrelation "categories" does not exist P15 F.\src\backend\parser\parse_relation.c L886 RparserOpenTable: SELECT * FROM "categories"
STACKTRACE
===========
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/abstract_adapter.rb:212:in `log'
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/postgresql_adapter.rb:507:in `execute'
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/postgresql_adapter.rb:985:in `select_raw'
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/postgresql_adapter.rb:972:in `select'
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/abstract/database_statements.rb:7:in `select_all_without_query_cache'
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/abstract/query_cache.rb:60:in `select_all'
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/abstract/query_cache.rb:81:in `cache_sql'
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/connection_adapters/abstract/query_cache.rb:60:in `select_all'
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:661:in `find_by_sql'
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:1553:in `find_every'
d:/ruby/lib/ruby/gems/1.8/gems/activerecord-2.3.2/lib/active_record/base.rb:615:in `find'
D:/ROR/Aptana/dedomenon/app/models/category.rb:50:in `get_all_with_exclusive_scope'
D:/ROR/Aptana/dedomenon/app/models/category.rb:50:in `get_all_with_exclusive_scope'
D:/ROR/Aptana/dedomenon/app/controllers/categories_controller.rb:48:in `index'
Run Code Online (Sandbox Code Playgroud)
这是我的database.yml档案
postgre: &postgre
adapter: postgresql
database: codex
host: localhost
username: postgres
password: root
port: 5432
mysql: &mysql
adapter: mysql
database: project
host: localhost
username: root
password: root
port: 3306
development:
<<: *postgre
test:
<<: *postgre
production:
<<: *postgre
master_database:
<<: *mysql
Run Code Online (Sandbox Code Playgroud)
我的master_database模特是这样的
class Category < ActiveRecord::Base
delegates_connection_to :master_database, :on => [:create, :save, :destroy]
end
Run Code Online (Sandbox Code Playgroud)
有人有任何解决方案?
小智 11
其他方式:
class Abc < ActiveRecord::Base
establish_connection Rails.configuration.database_configuration["test"]
end
Run Code Online (Sandbox Code Playgroud)
我不了解 active_delegate,但我最近不得不访问不同的工作应用程序数据库,但没有什么真正符合我想要的。所以我为自己写了一些东西,正如我们所说,它正在生产应用程序中运行。
固定链接connection_ninja