Mongoid #1: Установка
марта 1, 2011 | Published in Базы данных | 2 Comments
Данная статья является переводом официальной документации:
Для работы с MongoDB, из Ruby, необходимо установить gem Mongoid:
$ gem install mongoid —pre
Для исправления производительности, вы должно быть захотите установить расширения для Mongo написанные на Си, которые совместимы с вашей системой:
$ gem install bson_ext
Для того, чтобы использовать Mongoid в ваших приложениях на Rails следует добавить зависимости в файл Gemfile вашего приложения:
gem "mongoid", "2.0.0.rc.6" gem "bson_ext", "~> 1.2"
Далее настройте соединение с базой данных MongoDB используя автоматическое конфигурирование с помощью файла конфигурации config/mongoid.yml. Вы можете сгенирировать его с помощью следующей команды:
$ rails generate mongoid:config
Выполнив эту команды, вы назначите ORM по умолчанию в вашем приложении Mongoid. Теперь команда rails g model будет генерировать Mongoid’ную модель.
Ниже приведен пример файла конфигурации mongoid.yml с настройкаи по умолчанию:
defaults: &defaults host: localhost slaves: - host: slave1.local port: 27018 - host: slave2.local port: 27019 autocreate_indexes: false allow_dynamic_fields: true include_root_in_json: false parameterize_keys: true persist_in_safe_mode: false raise_not_found_error: true reconnect_time: 3 development: <<: *defaults database: control_development test: <<: *defaults database: control_test # установите эти переменые окружения на вашем production-сервере production: <<: *defaults host: <%= ENV['MONGOID_HOST'] %> port: <%= ENV['MONGOID_PORT'] %> database: <%= ENV['MONGOID_DATABASE'] %>
Настройка Mongoid
В данный момент Mongoid поддерживает приведеные ниже опции, которые, вы уже могли видеть выше в примере файла конфигурации соединения с MongoDB — mongoid.yml.
allow_dynamic_fields — Если атрибуты не определены, как поля, но, тем не менее добавлены в объект, то поля для их хранения будут сгенерированы автоматически и атрибуты будут сохранены. По умолчанию эта опция включена (true) и если ее отключить, то будет возникать ошибка при попытке добавить какое-либо значение, для которого не объявлено поле в котором ооно будет храниться.
autocreate_indexes — По умолчанию эта опция отключена. Если ее включить, то Mongoid будет пытаться создавать индексы какждый раз, как будет загружен класс. Включать эту опцию не рекомендуются ни для одного рабочего окружения, кроме development и test.
include_root_in_json — Эта опция так же отключена по умолчанию. Если ее активировать, то Mongoid будет включать имя root-документа и имя каждой ассоциации, как корневой элемент, когда в модели вызывается метод #to_json.
parametrize_keys — Эта опция сообщает Mongoid о необходимости конвертировать базовые специальные символы в составные ключи для дружелюбных для SEO подстрок. По умолчанию опция включена.
persist_in_safe_mode - Сообщает Mongoid выполнять все операции базы данных в safe-mode (безопасном режиме работы) MongoDB. Эта опция будет заставлять драйвер дважды проверять операции и вызывать ошибку если они вдруг упадут. По умолчанию опция отключена, так как ее включение наносит удар по производительности.
raise_not_found_error — Эта опция вызывает ошибку Mongoid::Error::DocumentNotFound когда производится попытка выбрать документ по id, которого не существует. По умолчанию опция включена и если ее выключить, то вместо ошибки будет возвращаться значение nil.
reconect_time — Эта опция сообщает Mongoid максимальное время на попытку повторного соединения с базой данных в случае, когда соединение с базой данных было разорвано. По умолчанию это время 3 секунды.
skip_version_check — Если у вас возникли проблемы с аутентификацией в MongoHQ или MongoMachine из-за того, что доступ к системной коллекции не был разрешен, то установите эту опцию в true.
Ведение логов в Mongoid
Вы можете объявить свой собственный логгер для Mongoid если вы не хотите использовать стандартный логгер из Rails в вашем приложении. Для этого следует внести некоторые правки в файл application.rb вашего приложения:
module MyApplication class Application < Rails::Application config.mongoid.logger = Logger.new($stdout, :warn) end end
Удаление Active Record
Теперь, когда у вас есть mongoid.yml вы не можете медлить с удалением этого надоедливого database.yml, ведь так? Удалите его и вы начнете повсюду получать ошибки ActiveRecord. Вам не нужен ActiveRecord, если только вы не хотите использовать базу данных с SQL и MongoDB вместе. Ниже приведен порядок действий для удаления ActiveRecord с самой последней версии Rails 3:
* Откройте файл yourapp/config/aplication.rb
* В самом начале кода удалите строку require ‘rails/all’ и добавьте следующие строки, чтобы покончить с ActiveRecord:
require "action_controller/railtie" require "action_mailer/railtie" require "active_resource/railtie" require "rails/test_unit/railtie"
* Запустите ваше приложение и познайте новый мир без ActiveRecord!
Другия языки
По умолчанию Mongoid добавляет файл l18n перевода для английского. Однако добавление новых языков — очень простой процесс. В инициализаторе вашего приложения (в Rails 3 это config/initializers/mongoid.rb), просто добавьте следущий код:
# добавляем испанский Mongoid.add_language("es")
Доступные языки для Mongoid, это:
* es: Spanish
* fr: French
* it: Italian
* pl: Polish
* pt: Portuguese
* sv: Swedish
Вы также можете включить все языковые файлы при помощи следующей строки:
# включаем все языки, о которых знает Mongo Mongoid.add_language("*")
Не используете Rails 3?
Вы можете инициализировать Mongoid в представленном ниже блоке конфигурации, или вызвав выше упомянутые методы непосредственно или используя from_hash для загрузки mongoid.yml:
Mongoid.configure do |config| name = "control_development" host = "localhost" config.master = Mongo::Connection.new.db(name) config.slaves = [ Mongo::Connection.new(host, 27018, :slave_ok => true).db(name) ] config.persist_in_safe_mode = false end
Или:
file_name = File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml") @settings = YAML.load(ERB.new(File.new(file_name).read).result) Mongoid.configure do |config| config.from_hash(@settings[ENV['RACK_ENV']]) end
Лучшая благодарность автору блога — ваши комментарии!
марта 31, 2011 at 21:02 (#)
Автор молодец! написал русский мануал по установке.
А Вот про сам [ruby]Mongoid[ruby] ничего.
Желательно бы описание гема, то биш как и с чем едят [ruby]Mongoid[ruby], и вообще в чем его преимущество, которое влечет за собой удаление [ruby]Active Record[ruby]
февраля 17, 2014 at 15:12 (#)
А как настроить что б одна моделька работала чисто с MongoDB а все остальный с postgresql?