2012年6月9日更新:
在heroku上使用mongoid 3.0.0.rc进行设置,请参阅此要点:https://gist.github.com/2900804
2011年1月22日更新:
Uri现在优先于mongoid.yml
https://github.com/mongoid/mongoid/issues/issue/266
更新2010年8月12日:虽然我可以从Jackues Crocker得到一个可接受的答案,但是这个问题的某些方面很容易搞砸!它再次发生在我身上,我决定研究mongoid源代码。所以,在这里:
目前, 主机:端口:名称/数据库:设置优先于 uri:设置。因此,非常无法提供信息的错误消息由于对 localhost: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'] %>
通过删除默认值中的主机:和/或删除&lt;&lt ;: *默认值
来解决此问题原文问:
我已在heroku为mongoHQ添加了mongodb个插件。它崩溃了:
connect_to_master': failed to connect to any given host:port (Mongo::ConnectionFailure)
在线描述(heroku mongohq)更像是针对mongomapper,正如我所看到的那样。我正在运行ruby 1.9.1并使用mongoid跟踪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:有高兴趣的人会创建标签'mongohq'吗?
答案 0 :(得分:25)
Mongoid(master)现在在mongoid.yml中有一个URI选项。所以你可以这样做:
production:
uri: <%= ENV['MONGOHQ_URL'] %>
要在项目中使用mongoid master,请在Gemfile中设置它
gem "mongoid", :git => "git@github.com:mongoid/mongoid.git"
希望很快就能发布新的宝石,这样可以清理它。
答案 1 :(得分:11)
在我看来,在defaults哈希中指定host会覆盖uri中的值。 要修复它,只需从默认设置中删除主机,这是我的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'] %>
以下是来自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
答案 2 :(得分:4)
我们在文档的heroku部分有一些mongoid文档。他们还没有正式发布,但你已经可以了。不要期待风格和内容的方式,但它确实有一些你可能会发现对mongoid有用的信息。
答案 3 :(得分: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