2010-05-06 8 views
15

UPDATE 9. Juni 2012:Heroku mongohq und mongoid Mongo :: ConnectionFailure

-Setup mit mongoid 3.0.0.rc bei Heroku, diesen Kern sehen: https://gist.github.com/2900804

UPDATE 22. Januar 2011:

Uri jetzt Vorrang in mongoid.yml

https://github.com/mongoid/mongoid/issues/issue/266

UPDATE 12. August 2010 nimmt: Obwohl ich eine akzeptierte Antwort 6. bekam kann von Jackues Crocker gibt es Aspekte dieser Ausgabe, die es leicht machen, durcheinander zu kommen! Es ist mir wieder passiert und ich habe mich entschieden, den Mongoid-Quellcode zu recherchieren. Also, hier geht es:

Derzeit host: port: Name/Datenbank: Einstellungen Vorrang vor den uri TAKE: Einstellung. Daher ist die furchtbar uninformativ Fehlermeldung geschieht aufgrund einer Anfrage an localhost: xxxx und nicht zu flame.local.mongohq.com:xxxx

Diese brechen!

defaults: &defaults 
    host: localhost <- THIS 'OVERWRITES' host in the uri! 

production: 
    <<: *defaults <- BE CAREFUL WITH WHAT YOU BRING IN. THE host: FROM DEFAULTS WILL BE THE ONE APPLIED, not your uri host. 
    uri: <%= ENV['MONGOHQ_URL'] %> 

fix es entweder mit Entfernen des host: in Standardwerte und/oder Entfernen der < <: * Standardwerte


ORIGINAL F:

Ich habe hinzugefügt, die mongoHQ Addon für mongodb bei Heroku. Es stürzt mit:

connect_to_master': failed to connect to any given host:port (Mongo::ConnectionFailure) 

Die Beschreibungen online (heroku mongohq) sind mehr in Richtung mongomapper gerichtet, wie ich es sehe. Ich laufe ruby ​​1.9.1 und rails 3-beta mit mongoid.

Mein Gefühl sagt, dass es etwas mit ENV['MONGOHQ_URL'] gibt, das das MongoHQ Addon setzt, aber ich habe MONGOHQ_URL nirgendwo in meiner App festgelegt. Ich denke, das Problem ist in meinem mongoid.yml?

defaults: &defaults 
    host: localhost 

development: 
    <<: *defaults 
    database: aliado_development 

test: 
    <<: *defaults 
    database: aliado_test 

# set these environment variables on your prod server 
production: 
    <<: *defaults 
    host: <%= ENV['MONGOID_HOST'] %> 
    port: <%= ENV['MONGOID_PORT'] %> 
    username: <%= ENV['MONGOID_USERNAME'] %> 
    password: <%= ENV['MONGOID_PASSWORD'] %> 
    database: <%= ENV['MONGOID_DATABASE'] %> 

Es funktioniert vor Ort in Ordnung, aber nicht bei Heroku, mehr Stack-Trace:

==> crashlog.log <== 
Cannot write to outdated .bundle/environment.rb to update it 
/disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/rack-1.1.0/lib/rack.rb:14: warning: already initialized constant VERSION 
/disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongo-0.20.1/lib/mongo/connection.rb:435:in `connect_to_master': failed to connect to any given host:port (Mongo::ConnectionFailure) 
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongo-0.20.1/lib/mongo/connection.rb:112:in `initialize' 
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4 
/lib/mongoid/railtie.rb:32:in `new' 
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4/lib/mongoid/railtie.rb:32:in `block (2 levels) in <class:Railtie>' 
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4/lib/mongoid.rb:110:in `configure' 
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/mongoid-2.0.0.beta4/lib/mongoid/railtie.rb:21:in `block in <class:Railtie>' 
    from /disk1/home/slugs/176479_b14df52_b875/mnt/.bundle/gems/gems/railties-3.0.0.beta3/lib/rails/initializable.rb:25:in `instance_exec' 
..... 

Alles vor Ort arbeitet, beiden Tests und App. Ich habe keine Ideen mehr ... Irgendwelche Vorschläge?

PS: Jemand mit hoher Reputation erstellt das Tag 'mongohq'?

Antwort

25

Mongoid (Master) hat jetzt eine URI-Option in mongoid.yml.So könnten Sie tun:

production: 
    uri: <%= ENV['MONGOHQ_URL'] %> 

mongoid Master in Ihrem Projekt zu verwenden, setzen Sie diese in Ihrem Gemfile

gem "mongoid", :git => "[email protected]:mongoid/mongoid.git" 

Hoffentlich ein neues Juwel wird in Kürze freigegeben werden, das auf die Dinge sauber wird.

+0

Die uri fix nicht scheinen noch zu arbeiten. Ich fand das Ticket/Problem bei github.com/durran/mongoid und die Quelle davon http://ragingonrails.com/post/566548996/using-mongoid-on-heroku-with-mongohq. Ich habe es auf die gleiche Weise gemacht, die ENV für Port, Host und so weiter manipuliert. Das hat funktioniert! – oma

+1

Diese Antwort ist als korrekt markiert. Für andere, die das gleiche erleben, beachte, dass ich selbst etwas zwicken musste. Es sollte auch sein:: git => git: // github.com/durran/mongoid.git – oma

+0

Jetzt müssen Sie 'production> sessions> default> uri' verwenden - aktualisiert die passende Antwort. – chrismdp

4

Wir haben einige Mongoid-Dokumente auf unserer Heroku-Sektion unserer Dokumentation. Sie sind noch nicht offiziell veröffentlicht worden, aber Sie können es schon erreichen. Erwarten Sie noch nicht viel von den Stilen und Inhalten, aber es gibt einige Informationen, die Sie für Mongoid nützlich finden könnten.

https://devcenter.heroku.com/articles/mongohq

0

Nur ein Hinweis, dass dies ohne Probleme funktioniert für mich, wie in der Werbung auf http://mongoid.github.com/docs/installation/

Gemfile:

gem "rails", '3.0.0.beta3' 
gem "mongoid", "2.0.0.beta4" 
gem "bson_ext", "0.20.1" 

mongoid.yml:

host: xxx.mongohq.com 
port: xxx 
database: db 
username: user 
password: xxx 
+0

Woher weißt du, was du anstelle von xxx bei der Bereitstellung auf Heroku verwenden sollst? Verwenden Sie nicht das MongoHQ heroku Addon? – oma

11

Es scheint mir, dass Host in den Standardwerten Hash ov angeben erodiert den Wert in uri. Um es zu beheben den Host aus dem Standard nur entfernen, hier ist meine config/mongo.yml:

defaults: &defaults 
    allow_dynamic_fields: true 
    parameterize_keys: true 
    persist_in_safe_mode: true 
    raise_not_found_error: true 
    reconnect_time: 3 
    use_object_ids: true 

production: 
    <<: *defaults 
    uri: <%= ENV['MONGOHQ_URL'] %> 

Hier ist der Ausschnitt aus mongoid der config.rb:

mongo_uri = settings["uri"].present? ? URI.parse(settings["uri"]) : OpenStruct.new 

    name = settings["database"] || mongo_uri.path.to_s.sub("/", "") 
    host = settings["host"] || mongo_uri.host || "localhost" # <= look here 
    port = settings["port"] || mongo_uri.port || 27017 
Verwandte Themen