Mongoid #1: Установка

марта 1, 2011  |  Published in Базы данных  |  2 Comments

mongoid logoДанная статья является переводом официальной документации:

Для работы с 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

Лучшая благодарность автору блога — ваши комментарии!

Tags: , , ,

Responses

  1. Temur says:

    марта 31, 2011 at 21:02 (#)

    Автор молодец! написал русский мануал по установке.
    А Вот про сам [ruby]Mongoid[ruby] ничего.
    Желательно бы описание гема, то биш как и с чем едят [ruby]Mongoid[ruby], и вообще в чем его преимущество, которое влечет за собой удаление [ruby]Active Record[ruby]

  2. Andrey says:

    февраля 17, 2014 at 15:12 (#)

    А как настроить что б одна моделька работала чисто с MongoDB а все остальный с postgresql?

Leave a Response

Для подсветки кода используйте BB - коды: [language]...[/language], где language может быть: ruby, javascript, css, html.