Монгоид без рельсов
Я играю с автономным рубиновым приложением и не могу настроить Mongoid 3.0.13 для работы.
Я столкнулся с несколькими примерами приложений с такими конфигурационными блоками, как:
Mongoid::Config.instance.from_hash({"database" => "oid"})
или
Mongoid.configure do |config|
name = "mongoid_test_db"
host = "localhost"
port = 27017
config.database = Mongo::Connection.new.db(name)
end
Это приводит к:
undefined method `database=' for Mongoid::Config:Module (NoMethodError)
Кажется, изменения конфигурации изменились недавно.
Я также пробовал:
Mongoid::Config.connect_to("sweet")
Но это ничего не делает.
Ответы
Ответ 1
Под "автономным" я предполагаю, что вы имеете в виду не рельсы. Mongoid действительно обеспечивает простой способ сделать эту работу независимо от того, как вы ее используете.
- Определите файл
mongoid.yml
с информацией о подключении к базе данных в нем, как обычно.
development:
clients:
default:
database: mongoid
hosts:
- localhost:27017
- Удостоверьтесь, что в вашем приложении требуется Mongoid.
- Вызовите
Mongoid.load!
, чтобы Mongoid проанализировал ваш файл конфигурации и инициализировал себя.
require 'mongoid'
Mongoid.load!('/path/to/your/mongoid.yml')
Эту информацию можно найти также в разделе "Sinatra, Padrino и другие":
http://mongoid.org/en/mongoid/docs/installation.html
Такой же подход применим и к не-webapps. Надеюсь, что это поможет.
Ответ 2
Попробуйте следующее:
prompt> ruby myapp.rb
hello world
prompt> cat mongoid.yml
development:
sessions:
default:
database: myapp
hosts:
- localhost:27017
prompt> cat myapp.rb
require 'mongoid'
Mongoid.load!("mongoid.yml", :development)
puts "hello world"
Ответ 3
Предыдущий ответ правильный, чтобы использовать Mongoid.load! если вы хотите загрузить из файла конфигурации mongoid. Я столкнулся с ситуацией, когда мне нужно было встроить конфигурацию Mongoid в другой файл конфигурации. Поэтому мне понадобился способ загрузить конфигурацию из хэша.
В > 3.1 вы сможете вызвать Mongoid.load_configuration (hash).
К сожалению, эта функция является частной в 3.0. Поэтому, настраивая общедоступный метод псевдонима перед загрузкой Mongoid, выполните следующие действия:
module Mongoid
module Config
def load_configuration_hash(settings)
load_configuration(settings)
end
end
end
Убедитесь, что этот код вызывается перед требованием 'mongoid'. Теперь вы можете вызвать Mongoid.load_configuration_hash (хэш).
Ответ 4
Вы можете подтвердить, что вы можете создать базу данных, добавить коллекцию в базу данных и добавить документы в коллекцию непосредственно из IRB:
$ rvm use 2.4.1
$ rvm-prompt
$ ruby-2.4.1
$ rvm gemset create mongoid_test
$ rvm use @mongoid_test
$ gem install mongoid
$ gem list | grep mongoid
$ mongoid (7.0.2)
$ rvm-prompt
$ [email protected]_test
$ irb
> require 'mongoid'
=> true
> Mongoid.load!('mongoid.yml', :development)
=> {"clients"=>{"default"=>{"database"=>"mongoid_test", "hosts"=>["localhost:27017"]}}}
> class LineItem
include Mongoid::Document
include Mongoid::Attributes::Dynamic
end
> item = LineItem.new
> item['cost'] = 12.00
> item['quantity'] = 3
> item['name'] = 'Protein Bars'
> item.save!
=> true
> LineItem.all.size
=> 1
> i = LineItem.first
=> #<LineItem _id: 5c552b8d496a9d0828b374b5, cost: 12.0, quantity: 3, name: "Protein Bars">
> i.fields.keys
=> ["_id"]
i.inspect_dynamic_fields
=> ["cost: 12.0", "quantity: 3", "name: \"Protein Bars\""]
Откройте оболочку MongoDB и убедитесь, что ваши данные есть:
$ mongo
> show dbs
admin
config
local
mongoid_test
> use mongoid_test
switched to db mongoid_test
> show collections
line_items
> db.line_items.find({ cost: 12.0, quantity: 3, name: 'Protein Bars'}, {_id: 0})
{ "cost" : 12, "quantity" : 3, "name" : "Protein Bars" }
Прямо вперед, гибкий и, ну, довольно динамичный.