2010-05-06 16 views
15

UPDATE 9 Giugno 2012:Heroku mongohq e mongoid Mongo :: ConnectionFailure

installazione con 3.0.0.rc mongoid a Heroku, vedere questo succo: https://gist.github.com/2900804

AGGIORNAMENTO 22 gennaio 2011:

Uri ora ha la precedenza in mongoid.yml

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

AGGIORNAMENTO 12 Agosto 2010: Anche se ho ricevuto una risposta accettata 6 maggio da Jacks Crocker, ci sono aspetti di questo problema che rende facile fare casino! È successo a me ancora una volta e ho deciso di cercare il codice sorgente mongoid. Quindi, qui va:

Attualmente, host: port: nome/database: impostazioni hanno la precedenza sulle uri: impostazione. Quindi, il messaggio di errore terribilmente uninformative sta accadendo a causa di una richiesta di localhost: xxxx e non flame.local.mongohq.com:xxxx

questo si romperà!

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'] %> 

fissarlo con rimuovendo l'host : in default, e/o rimozione del < <: * default


Q ORIGINALE:

ho aggiunto il mongoHQ addon per mongodb su heroku. Si blocca con:

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

Le descrizioni online (heroku mongohq) sono più diretti verso MongoMapper, come la vedo io. Sto eseguendo Ruby 1.9.1 e rotaie 3-beta con mongoid.

La mia sensazione dice che c'è qualcosa con ENV['MONGOHQ_URL'], che dice il set di componenti MongoHQ, ma non ho impostato MONGOHQ_URL ovunque nella mia app. Immagino che il problema sia nel mio 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'] %> 

Funziona bene a livello locale, ma non riesce a Heroku, più dello 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' 
..... 

Funziona tutto a livello locale, entrambi i test e le app. Sono fuori idee ... Qualche suggerimento?

PS: qualcuno con una buona reputazione crea il tag "mongohq"?

risposta

25

Mongoid (master) ora ha un'opzione URI in mongoid.yml.Così si potrebbe fare:

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

Per utilizzare maestro mongoid nel progetto, impostare questo nel vostro Gemfile

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

Speriamo che un nuovo gioiello sarà rilasciata presto che pulire le cose.

+0

La correzione uri non lo fa sembra funzionare ancora. Ho trovato il ticket/problema su github.com/durran/mongoid e la sua fonte http://ragingonrails.com/post/566548996/using-mongoid-on-heroku-with-mongohq. L'ho fatto allo stesso modo, manipolando l'ENV per port, host e così via. Ha funzionato! – oma

+1

Questa risposta è contrassegnata come corretta. Per gli altri che stanno vivendo lo stesso, nota che ho dovuto tweek un po 'di me stesso. Dovrebbe anche essere ': git => git: // github.com/durran/mongoid.git' – oma

+0

Ora è necessario usare' produzione> sessioni> default> uri' - aggiorna la risposta per corrispondere. – chrismdp

4

Abbiamo alcuni documenti mongolo sulla nostra sezione di heroku dei nostri documenti. Non sono ancora stati rilasciati ufficialmente, ma puoi già farlo. Non aspettarti ancora molto in termini di stili e contenuti, ma hai alcune informazioni che potresti trovare utili per mongoid.

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

0

Solo una nota che questo funziona per me senza problemi, come pubblicizzato sul 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

come fai a sapere cosa mettere invece di xxx, quando si esegue la distribuzione su heroku? Non stai usando l'addon di MongoHQ heroku? – oma

11

E ' mi sembra che specificando l'host nell'hash predefinito errega il valore in uri. per risolvere il problema è sufficiente rimuovere l'host dal default, ecco il mio 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'] %> 

Ecco il frammento dal config.rb di mongoid:

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 
Problemi correlati