Соединение с несколькими базами данных в Rails

используя active_delegate для нескольких соединений в Rails. Здесь я'm использует 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:
  

Ответы на вопрос(7)

Это изменит соединение с базой данных для одного объекта модели.

$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

но недавно мне пришлось обращаться к различным базам данных для рабочих приложений, и ничего не подходило мне по вкусу. Так что я написал что-то для себя, этокак мы говорим, в производственных приложениях.

Фиксированная ссылкаconnection_ninja

 Nicolas Buduroi19 июл. 2010 г., 02:08
Эта страница нене существует!

ых, поэтому я создал гем под названием secondbase:http://github.com/karledurante/secondbase

Я настоятельно рекомендуюMyReplication Плагин для адаптера MySQL, который позволяет элегантно переключать соединение во время выполнения:

User.using(:another_database) do
  u = User.all
end

https://github.com/minhnghivn/my_replication

По-другому:

class Abc < ActiveRecord::Base
  establish_connection Rails.configuration.database_configuration["test"]
end

все еще получая ошибку !!

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  

я запускаю монгрел только в режиме developmnet.

вот моя модель суперкласса

$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 

Пожалуйста, поправьте меня .. Я

https://github.com/tchandy/octopus Настоящее время.

Ваш ответ на вопрос