14

我正在使用独立的 ruby​​ 应用程序,无法配置 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")

但这似乎无济于事。

4

4 回答 4

13

“独立”我假设你的意思不是轨道。Mongoid 实际上提供了一种简单的方法来完成这项工作,无论您如何运行它。

  1. mongoid.yml像往常一样定义一个包含数据库连接信息的文件。
development:
  clients:
    default:
      database: mongoid
      hosts:
        - localhost:27017
  1. 确保您的应用程序中需要 Mongoid。
  2. 调用Mongoid.load!让 Mongoid 解析您的配置文件并初始化自身。
require 'mongoid'
Mongoid.load!('/path/to/your/mongoid.yml')

此信息也可以在“Sinatra、Padrino 和其他”部分下找到:http: //mongoid.org/en/mongoid/docs/installation.html

同样的方法也适用于非 webapps。希望有帮助。

于 2013-03-07T23:58:09.900 回答
4

尝试这个:

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"
于 2014-08-01T02:24:13.280 回答
0

使用 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

确保在 require 'mongoid' 之前调用此代码。现在你可以调用 Mongoid.load_configuration_hash(hash)。

于 2014-01-27T20:43:40.003 回答
0

您可以确认您可以创建数据库,将集合添加到数据库并直接从 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
$ ruby-2.4.1@mongoid_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 shell 并确认您的数据在那里:

$ 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" }

直截了当,灵活,而且非常有活力。

于 2019-02-02T05:43:18.863 回答