[英]Multiple database connection in Rails
我正在使用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'
這是我的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
我的master_database
模型是這樣的
class Category < ActiveRecord::Base
delegates_connection_to :master_database, :on => [:create, :save, :destroy]
end
有人有任何解決方案?
其他方式:
class Abc < ActiveRecord::Base
establish_connection Rails.configuration.database_configuration["test"]
end
現在可能想看看https://github.com/tchandy/octopus 。
這將更改單個模型對象的數據庫連接。
$config = YAML.load_file(File.join(File.dirname(__FILE__),
'../config/database.yml'))
class ModelWithDifferentConnection < ActiveRecord::Base
establish_connection $config['connection_name_from_database_yml']
end
如果您使用相同的服務器但只使用不同的數據庫文件,那么您可以執行類似的操作。
class ModelWithDifferentConnection < ActiveRecord::Base
# Lives in the CURRICULUM database
def self.table_name
"database.table"
end
end
我強烈建議使用MySQL適配器的MyReplication插件,它可以幫助您以優雅的方式在運行時切換連接:
User.using(:another_database) do
u = User.all
end
我試過你的Sample,仍然收到錯誤!!
superclass mismatch for class MysqlAdapter
我想,問題出在我的database.yml
文件中。請檢查此文件
database_mysql:
adapter: mysql
database: project
host: localhost
username: root
password: root
port: 3306
development:
adapter: postgresql
database: codex
host: localhost
username: postgres
password: root
port: 5432
test:
adapter: postgresql
database: codex
host: localhost
username: postgres
password: root
port: 5432
production:
adapter: postgresql
database: codex
host: localhost
username: postgres
password: root
port: 5432
我只在開發模式下啟動雜種。
這是我的模型超類
$config = YAML.load_file(File.join(File.dirname(__FILE__),
'../../config/database.yml'))
class MasterDatabase < ActiveRecord::Base
self.abstract_class = true
establish_connection $config['database_mysql']
end
請糾正我..
我還必須連接並管理兩個不同的數據庫,所以我創建了一個名為secondbase的gem: http ://github.com/karledurante/secondbase
我不知道active_delegate,但我最近不得不訪問工作應用程序的不同數據庫,並沒有什么真正適合我想要的。 所以我為自己寫了一些東西,它就像我們說的那樣在生產應用程序中運行。
固定鏈接connection_ninja
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.