2013-03-07 8 views
10

Ich spiele mit einer eigenständigen Ruby-Anwendung und kann Mongoid 3.0.13 nicht konfigurieren, um zu funktionieren.Mongoid ohne Rails

Ich habe über ein paar Beispiel-Anwendungen ausführen, die Konfigurationsblöcke haben wie:

Mongoid::Config.instance.from_hash({"database" => "oid"}) 

Oder

Mongoid.configure do |config| 
name = "mongoid_test_db" 
host = "localhost" 
port = 27017 
config.database = Mongo::Connection.new.db(name) 
end 

Diese resultieren in:

undefined method `database=' for Mongoid::Config:Module (NoMethodError) 

Es scheint die Konfigurationseinstellungen habe sich kürzlich geändert.

ich auch versucht:

Mongoid::Config.connect_to("sweet") 

Aber das scheint nichts zu tun.

Antwort

11

Mit "Standalone" nehme ich an, du meinst nicht Schienen. Mongoid bietet tatsächlich eine einfache Möglichkeit, dies unabhängig davon, wie Sie es ausführen, zu arbeiten.

  1. Definieren Sie eine mongoid.yml Datei mit Ihren Datenbankverbindungsinformationen wie normal.
development: 
    clients: 
    default: 
     database: mongoid 
     hosts: 
     - localhost:27017 
  1. Stellen Sie sicher, Mongoid in Ihrer Anwendung erforderlich haben.
  2. Rufen Sie Mongoid.load! an, damit Mongoid Ihre Konfigurationsdatei analysiert und initialisiert. http://mongoid.org/en/mongoid/docs/installation.html

    Der gleiche Ansatz gilt für nicht-Webapps:

require 'mongoid' 
Mongoid.load!('/path/to/your/mongoid.yml') 

Diese Information kann auch hier unter der "Sinatra, Padrino und andere" Abschnitt. Ich hoffe, das hilft.

+0

@ ashes999 die richtige obwohl die Antwort. : -/Es dauert nur ein wenig graben/verstehen, was unter der Haube in der Datenbank unter Mongoid passiert. "Client" ist die offizielle MongoDB-Terminologie, in der Sie ihre Dokumente finden, und Mongoid hat das Konzept einer "Sitzung" hinzugefügt. In modernen Versionen von Mongoid wurde das gesamte Konzept der Sitzung abgeschafft. –

0

Die vorherige Antwort ist richtig, Mongoid.load zu verwenden! wenn Sie von einer Mongoid-Konfigurationsdatei laden möchten. Ich stieß auf einen Fall, in dem ich die Mongoid-Konfiguration in eine andere Konfigurationsdatei einbetten musste. Daher brauchte ich einen Weg, um die Konfiguration von einem Hash zu laden.

In> 3.1 können Sie Mongoid.load_configuration (Hash) aufrufen.

Leider ist diese Funktion in 3.0 privat. Daher eine öffentliche alias Methode Einrichtung vor Mongoid Laden funktioniert:

module Mongoid 
    module Config 
    def load_configuration_hash(settings) 
     load_configuration(settings) 
    end 
    end 
end 

Vergewissern Sie sich dieser Code vor ‚mongoid‘ erfordern aufgerufen wird. Jetzt können Sie Mongoid.load_configuration_hash (Hash) aufrufen.

2

Try this:

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 Ihr funktionierendes Beispiel von 'mongoid.yml' löste mein Problem von' stellen Sie sicher, dass Sie einen Sitzungsschlüssel der höchsten Ebene mit mindestens einer Standardsitzungskonfiguration dafür haben'. Die offiziellen Mongo Docs verwenden 'Clients' anstatt' Sessions', was nicht funktioniert – ashes999