2010-05-06 62 views
15

UPDATE 2012年6月9日:Heroku的mongohq和mongoid蒙戈:: ConnectionFailure

設置與Heroku的mongoid 3.0.0.rc,看到這個要點:https://gist.github.com/2900804

UPDATE 2011年1月22日:

烏里現在可以優先mongoid.yml

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

UPDATE 2010年8月12日:雖然我得到一個公認的答案5月6日來自Jackues Crocker,這個問題的一些方面很容易搞砸!它又發生在我身上,我決定研究mongoid源代碼。所以,這裏有雲:

目前,主機:端口:名稱/數據庫:設置優先於URI:設置。因此,非常不提供信息的錯誤消息,由於發生在請求本地主機:XXXX而不是flame.local.mongohq.com:xxxx

這將打破!在默認,和/或去除所述< <:

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

與任一去除主機修復它*默認


ORIGINAL問:

我已經添加了mongoHQ插件爲mongodb at heroku。它與崩潰:

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

的描述在線(heroku mongohq)更針對mongomapper,因爲我看到它。我正在運行ruby 1.9.1並使用mongoid來引導rails 3-beta。

我的感覺說有ENV['MONGOHQ_URL'],它說MongoHQ插件設置,但我沒有在我的應用程序的任何地方設置MONGOHQ_URL。我想這個問題在我的 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'] %> 

它工作正常,在當地,但在Heroku的失敗,更多的堆棧跟蹤:

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

它所有的工作在當地,這兩個測試和應用。我沒有想法...有什麼建議嗎?

PS:有高repu心的人創建標籤'mongohq'?

回答

25

Mongoid(master)現在在mongoid.yml中有一個URI選項。所以,你可以這樣做:

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

要在項目中使用mongoid高手,你的Gemfile

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

希望新的寶石設置,這將很快被釋放,這將乾淨的東西了。

+0

的URI修復不似乎仍然有效。我在github.com/durran/mongoid發現了票據/問題,並在http://ragingonrails.com/post/566548996/using-mongoid-on-heroku-with-mongohq上找到了它的來源。我以同樣的方式做了它,操縱端口,主機等的ENV。這工作! – oma 2010-05-07 10:19:55

+1

此答案標記爲正確。對於其他人來說,請注意,我必須自己瑣事。它也應該是':git => git:// github.com/durran/mongoid.git' – oma 2010-05-07 14:17:44

+0

現在需要使用'production> sessions> default> uri' - 更新匹配的答案。 – chrismdp 2012-09-21 09:31:11

4

我們在我們的文檔的heroku部分有一些mongoid文檔。他們還沒有正式發佈,但你可以得到它已經。不要期望風格和內容的方式,但它確實有一些信息,你可能會發現有用的mongoid。

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

0

剛一說明,這對我的作品沒有任何問題,在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

當你部署到heroku時,你怎麼知道要放置什麼而不是xxx?你不使用MongoHQ heroku插件嗎? – oma 2010-05-10 13:50:22

11

它在我看來,在默認值hash中指定主機erri在uri中的值。 要修復它只是從默認刪除主機,這裏是我的配置/ 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'] %> 

下面是mongoid的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