MISE À JOUR 9 juin 2012:heroku mongohq et MongoId Mongo :: ConnectionFailure
Configuration avec 3.0.0.rc MongoId à Heroku, voir ce point essentiel: https://gist.github.com/2900804
Mise à jour le 22 janvier 2011:
Uri est maintenant prioritaire dans mongoid.yml
https://github.com/mongoid/mongoid/issues/issue/266
Mise à jour le 12 août 2010: Bien que je suis une 6ème réponse acceptée peut de Jackues Crocker, il ya des aspects de ce problème qui le rend facile à gâcher! Cela m'est arrivé encore une fois et j'ai décidé de rechercher le code source mongoïde. Alors, voilà:
Actuellement, host: port: nom/base de données: paramètres PRIMENT Au cours des uri: réglage. Par conséquent, le message d'erreur terriblement uninformative se produit en raison d'une demande de localhost: xxxx et non flame.local.mongohq.com:xxxx
Ceci brisera!
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'] %>
fixer avec retirant le hôte: en défaut, et/ou le retrait du < <: * défaut
Q ORIGINAL:
J'ai ajouté la mongoHQ addon pour mongodb à heroku. Il se bloque avec:
connect_to_master': failed to connect to any given host:port (Mongo::ConnectionFailure)
Les descriptions en ligne (heroku mongohq) sont plus orientés vers mongomapper, comme je le vois. Je cours Ruby 1.9.1 et rails 3-beta avec mongoid. Mon sentiment dit qu'il y a quelque chose avec ENV['MONGOHQ_URL']
, qui dit que les addons MongoHQ sont définis, mais je n'ai pas défini MONGOHQ_URL
n'importe où dans mon application. Je suppose que le problème est dans mon 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'] %>
Il fonctionne très bien au niveau local, mais échoue à Heroku, plus trace de la pile:
==> 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'
.....
Tout fonctionne localement, les tests et l'application. Je n'ai plus d'idées ... Des suggestions? PS: Quelqu'un avec l'esprit répu élevé créer l'étiquette «mongohq»?
Le correctif uri ne le fait pas semblent fonctionner encore. J'ai trouvé le ticket/problème sur github.com/durran/mongoid et la source de celui-ci http://ragingonrails.com/post/566548996/using-mongoid-on-heroku-with-mongohq. Je l'ai fait de la même manière, en manipulant l'ENV pour le port, l'hôte et ainsi de suite. Ça a marché! – oma
Cette réponse est marquée comme correcte. Pour les autres qui ressentent la même chose, notez que j'ai dû tweek moi-même. Il devrait également être ': git => git: // github.com/durran/mongoid.git' – oma
Maintenant besoin d'utiliser' production> sessions> par défaut> uri' - mis à jour la réponse à faire correspondre. – chrismdp