Какую ORM использовать в одном процессе с несколькими дБ соединениями приложения синатра? - PullRequest
5 голосов
/ 14 апреля 2010

Проверено ActiveRecord, DataMapper, Sequel: некоторые используют глобальные переменные (статические переменные), некоторые требуют открытого соединения с БД перед загрузкой исходного файла с моделями. Какой ORM лучше использовать в приложении sinatra, которое использует разные базы данных.

Ответы [ 3 ]

8 голосов
/ 13 мая 2010

DataMapper предназначен для использования в нескольких базах данных.

Вы можете настроить несколько репозиториев, просто сказав что-то вроде DataMapper.setup(:repository_one, "mysql://localhost/my_db_name").

Затем DataMapper отслеживает все репозитории, которые были настроены в хэше, на который вы можете ссылаться и который можете использовать для определения объема:

DataMapper.repository(:repository_one){ MyModel.all }

(Область по умолчанию просто DataMapper.repository, которую вы можете установить, сказав DataMapper.setup(:default, "postgres://localhost/my_primary_db") или подобное)

5 голосов
/ 14 мая 2010

Похоже, что в большинстве ORM можно использовать разные базы данных. Для DataMapper посмотрите ответ thetheory. Для продолжения вы можете передать обработчик базы данных в модель:

class Tag < Sequel::Model(db)
end

где база данных открыта. Для ActiveRecord вы можете использовать метод create_connection.

2 голосов
/ 14 апреля 2010

Лично я предпочитаю Sequel для всех моих ORM и базовых обращений к базе данных, и это то, что я использую с Sinatra / Padrino и в любое другое время, когда мне нужен доступ к базе данных вне Rails.

Я использовал DataMapper, но чувствовал, что Sequel проще и гибче, но, возможно, именно так работает мой разум. ActiveRecord сам по себе в порядке, но я думаю, что он лучше всего работает в сочетании с Rails.

Что "лучше"? Я думаю, что это субъективно и в основном связано с тем, как работает ваш мозг.

...