2010-05-06 10 views
15

ACTUALIZACIÓN nono Junio ​​2012:heroku mongohq y MongoId Mongo :: ConnectionFailure

instalación con 3.0.0.rc MongoId en heroku, ver este GIST: https://gist.github.com/2900804

ACTUALIZACIÓN 22 de jan 2011:

Uri ahora tiene prioridad en mongoid.yml

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

ACTUALIZACIÓN 12ª aug 2010: a pesar de que tengo un sexto respuesta aceptada puede de Jackues Crocker, hay aspectos de este problema que hacen que sea fácil equivocarse. Me pasó una vez más y decidí investigar el código fuente monótono. Por lo tanto, aquí va:

Actualmente, host: puerto: Nombre/base de datos: configuración tienen prioridad sobre los uri: ajuste. Por lo tanto, el mensaje de error muy poco informativo está sucediendo debido a una solicitud de localhost: xxxx y no a flame.local.mongohq.com:xxxx

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

arreglo él, ya sea con la eliminación del anfitrión : de la morosidad, y/o la eliminación de la < <: * por defecto


Q ORIGINAL:

que han añadido el mongoHQ complemento para mongodb en heroku. Se estrella con:

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

Las descripciones en línea (heroku mongohq) están más dirigidos hacia MongoMapper, tal como lo veo. Estoy ejecutando ruby ​​1.9.1 y rails 3-beta con mongoid.

Mi sensación dice que hay algo con ENV['MONGOHQ_URL'], que dice que el complemento MongoHQ establece, pero no he configurado MONGOHQ_URL en ninguna parte de mi aplicación. Supongo que el problema está en mi 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'] %> 

Funciona bien a nivel local, pero falla en heroku, más Seguimiento de la pila:

==> 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' 
..... 

Todo funciona a nivel local, ambas pruebas y aplicación. Me he quedado sin ideas ... ¿Alguna sugerencia?

PD: ¿Alguien con alta reputación cree la etiqueta 'mongohq'?

Respuesta

25

Mongoid (maestro) ahora tiene una opción de URI en mongoid.yml.Por lo que podría hacer:

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

Para utilizar MongoId maestro en su proyecto, establecer esto en su Gemfile

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

de esperar una nueva joya se dará a conocer pronto que limpiar las cosas.

+0

El arreglo uri no lo hace parece que funciona todavía Encontré el boleto/problema en github.com/durran/mongoid y su fuente http://ragingonrails.com/post/566548996/using-mongoid-on-heroku-with-mongohq. Lo hice de la misma manera, manipulando el ENV para el puerto, el host, etc. ¡Eso funciono! – oma

+1

Esta respuesta está marcada como correcta. Para los demás que experimentan lo mismo, tenga en cuenta que tuve que tweek algunos yo mismo. También debería ser ': git => git: // github.com/durran/mongoid.git' – oma

+0

Ahora necesita usar' production> sessions> default> uri' - actualizó la respuesta para que coincida. – chrismdp

4

Tenemos algunos documentos mongoides en nuestra sección heroku de nuestros documentos. Todavía no han sido lanzados oficialmente, pero ya puedes conseguirlo. No espere demasiado en cuanto a estilos y contenido aún, pero tiene alguna información que podría serle útil para mongoid.

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

0

Sólo una nota que esto funciona para mí sin ningún problema, como se anuncia en 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

¿cómo se sabe qué poner en lugar de xxx cuando se despliega en heroku? ¿No estás usando el complemento MongoHQ heroku? – oma

11

Se me parece que la especificación de host en los valores predeterminados hash ov anula el valor en uri. solucionarlo basta con retirar el anfitrión del defecto, aquí está mi 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'] %> 

Aquí está el fragmento de config.rb de 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