2013-03-07 145 views
10

我在玩独立的ruby应用程序,无法配置Mongoid 3.0.13的工作。Mongoid Without Rails

我可以在已有的配置块一对夫妇的例子应用程序,如运行:

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") 

,但似乎什么也不做。

回答

11

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

  1. 定义一个mongoid.yml文件,其中的数据库连接信息就像正常一样。
development: 
    clients: 
    default: 
     database: mongoid 
     hosts: 
     - localhost:27017 
  • 确保你需要Mongoid在您的应用程序。
  • 致电Mongoid.load!让Mongoid解析你的配置文件并初始化自己。
  • require 'mongoid' 
    Mongoid.load!('/path/to/your/mongoid.yml') 
    

    此信息也可以根据这里找到“西纳特拉,Padrino,和其他人”部分: http://mongoid.org/en/mongoid/docs/installation.html

    同样的方法适用于非web应用。希望有所帮助。

    +0

    @ ashes999的答案是正确的,但。 : - /只需要对mongoid下面的数据库中隐藏的内容进行一点挖掘/理解。 “客户端”是官方的MongoDB术语,你会找到他们的文档,而mongoid在其上添加了“会话”的概念。在现代版本的mongoid中,会话的整个概念已被废除。 – 2016-01-21 21:29:47

    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 
    

    确保该代码被前需要“mongoid”叫。现在你可以调用Mongoid.load_configuration_hash(hash)。

    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" 
    
    +0

    +1你的'mongoid.yml'的工作例子解决了'确保你有一个顶级会话密钥并至少有1个默认会话配置'的问题。官方的mongo文档使用'clients'而不是'sessions',这是行不通的 – ashes999 2015-08-12 17:02:01