У меня есть приложение rails, сконфигурированное со смешанными соединениями mysql и sqlite3 db, и чтобы связать определенные модели с sqlite3, я добавляю строку "create_connection 'sqlite_db_config_name'" в каждое определение класса.
Когда я пытаюсь сохранить любой объект модели, связанный с sqlite3, сохранение происходит успешно, но когда я пытаюсь сохранить объект, состоящий из других объектов (через has_many), я получаю исключение BusyException. У меня такое ощущение, что каждый объект имеет свое собственное соединение с БД, а объект верхнего уровня блокирует базу данных, затем вызывает методы сохранения объектов-членов, и они не могут получить блокировку.
Я предполагаю, что есть способ заставить эту работу работать, и я неправильно использую установившуюся связь.
Кто-нибудь еще сталкивался с этим?
database.yml config:
Dev:
development:
adapter: mysql
database: maindb
username: root
password:
host: localhost
sqlite:
adapter: sqlite3
database: db/db.sqlite3
timeout: 15000
определения модели:
class Foo < ActiveRecord::Base
establish_connection 'sqlite'
belongs_to :bar
end
class Bar < ActiveRecord::Base
establish_connection 'sqlite'
has_many :foo
def addFoo(item)
self.foos << item
end
end
class MysqlModel < ActiveRecord::Base
end
Другое:
Рубин 1,8,7
Рельсы 2.3.4
Ubuntu 10.04
Обновление:
Я попытался использовать наследование, чтобы изолировать оператор Estab_connection в одном классе, основываясь на объяснении dils rails doc: «Эта функция реализована путем сохранения пула соединений в ActiveRecord :: Base, который является хешем, проиндексированным классом. Если запрашивается соединение, метод retrieve_connection будет подниматься по иерархии классов до тех пор, пока соединение не будет найдено в пуле соединений. " Но по какой-то причине rails связывают подклассы класса sqlite-подключений с подключением по умолчанию для mysql. Поэтому я прекратил попытки установить отношение has_many / own_to с sqlite и отменил нормализацию своих моделей.