ОБНОВЛЕНИЕ 9-го июня 2012:
Установка с mongoid 3.0.0.rc в heroku, посмотрите эту суть: https://gist.github.com/2900804
ОБНОВЛЕНИЕ 22-го января 2011:
Uri теперь имеет приоритет в mongoid.yml
https://github.com/mongoid/mongoid/issues/issue/266
ОБНОВЛЕНИЕ 12-го августа 2010: Хотя я получил принятый ответ 6-го мая от Jackues Crocker, существуют аспекты этой проблемы, которая помогает испортить! Это произошло со мной все снова и снова, и я решил исследовать mongoid исходный код. Так, здесь это идет:
В настоящее время, хост: порт: имя/база данных: настройки TAKE PRECEDENCE OVER uri: установка. Следовательно, ужасно неинформативное сообщение об ошибке происходит из-за запроса к localhost:xxxx а не гореть 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'] %>
зафиксируйте его с любым удалением хоста: в значениях по умолчанию и/или удалении <<: *значения по умолчанию
ОРИГИНАЛ Q:
Я добавил mongoHQ дополнение для mongodb в heroku. Это отказывает с:
connect_to_master': failed to connect to any given host:port (Mongo::ConnectionFailure)
Описания онлайн (heroku mongohq) более направлены к mongomapper, поскольку я вижу его. Я выполняю рубиновые 1.9.1 и направляющие, с 3 бетами с mongoid.
Мое чувство говорит, что существует что-то с 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 '
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 '
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'?
Mongoid (master) теперь имеет опцию URI в mongoid.yml. Так что вы можете сделать:
production:
uri: <%= ENV['MONGOHQ_URL'] %>
Чтобы использовать mongoid master в вашем проекте, установите это в вашем Gemfile
gem "mongoid", :git => "git@github.com:mongoid/mongoid.git"
Надеюсь, скоро выйдет новый gem, который наведет порядок.
У нас есть несколько монгоидных документов в разделе heroku нашей документации. Официально они еще не выпущены, но вы уже можете это сделать. Пока не ожидайте многого в отношении стилей и контента, но в нем есть некоторая информация, которая может оказаться полезной для mongoid.
Замечу, что это работает для меня без каких-либо проблем, как указано на 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
Мне кажется, что указание host в хэше defaults переопределяет значение в uri. Чтобы исправить это, просто удалите host из default, вот мой 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'] %>
Вот фрагмент из config.rb 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