MongoDB не будет подключаться к MongoHQ с помощью Mongoid

Я только что начал новый проект rails, и первая задача, которую я пытаюсь выполнить, — создать объект и сохранить его в моей базе данных. Я прошел автоматизированный способ создания объекта, в данном случае объекта URL, следующим образом:

rails generate scaffold Url domain:string

Я также протестировал два отдельных параметра конфигурации mongoid.yml. Первый заключается в следующем:

development:
  sessions:
    default:
      # Defines the name of the default database that Mongoid can connect to.
      # (required).
      uri: mongodb://[username]:[password]@flame.mongohq.com:27046/[database]

      options:
        consistency: :strong 

Результатом этой конфигурации является то, что при выполнении запроса я получаю следующую ошибку:

The operation: #<Moped::Protocol::Query
  @length=39
  @request_id=5
  @response_to=0
  @op_code=2004
  @flags=[]
  @full_collection_name=".urls"
  @skip=0
  @limit=0
  @selector={}
  @fields=nil>
 failed with error 13075: "db name can't be empty"

Я также тестировал со следующей конфигурацией:

development:
  uri: mongodb://[username]:[password]@flame.mongohq.com:27046/[database]

Когда код переходит к методу создания urls_controller, он завершается с ошибкой @url.save со следующей ошибкой:

mongoid (3.0.0.rc) lib/mongoid/sessions/factory.rb:100:in `parse'
mongoid (3.0.0.rc) lib/mongoid/sessions/factory.rb:61:in `create_session'
mongoid (3.0.0.rc) lib/mongoid/sessions/factory.rb:43:in `default'
mongoid (3.0.0.rc) lib/mongoid/sessions.rb:109:in `default'
mongoid (3.0.0.rc) lib/mongoid/sessions.rb:354:in `__session__'
mongoid (3.0.0.rc) lib/mongoid/sessions.rb:199:in `mongo_session'
mongoid (3.0.0.rc) lib/mongoid/sessions.rb:157:in `collection'
mongoid (3.0.0.rc) lib/mongoid/sessions.rb:25:in `collection'
mongoid (3.0.0.rc) lib/mongoid/persistence/operations.rb:26:in `collection'
mongoid (3.0.0.rc) lib/mongoid/persistence/operations/insert.rb:27:in `block in persist'
mongoid (3.0.0.rc) lib/mongoid/persistence/insertion.rb:25:in `block (2 levels) in  prepare'
activesupport (3.2.3) lib/active_support/callbacks.rb:403:in `_run__2492706777632263523__create__3276423133299307975__callbacks'
activesupport (3.2.3) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.3) lib/active_support/callbacks.rb:385:in `_run_create_callbacks'
activesupport (3.2.3) lib/active_support/callbacks.rb:81:in `run_callbacks'
mongoid (3.0.0.rc) lib/mongoid/callbacks.rb:95:in `run_callbacks'
mongoid (3.0.0.rc) lib/mongoid/persistence/insertion.rb:24:in `block in prepare'
activesupport (3.2.3) lib/active_support/callbacks.rb:403:in  `_run__2492706777632263523__save__3276423133299307975__callbacks'
activesupport (3.2.3) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.3) lib/active_support/callbacks.rb:385:in `_run_save_callbacks'
activesupport (3.2.3) lib/active_support/callbacks.rb:81:in `run_callbacks'
mongoid (3.0.0.rc) lib/mongoid/callbacks.rb:95:in `run_callbacks'
mongoid (3.0.0.rc) lib/mongoid/persistence/insertion.rb:23:in `prepare'
mongoid (3.0.0.rc) lib/mongoid/persistence/operations/insert.rb:26:in `persist'
mongoid (3.0.0.rc) lib/mongoid/persistence.rb:49:in `insert'
mongoid (3.0.0.rc) lib/mongoid/persistence.rb:188:in `upsert'
app/controllers/urls_controller.rb:46:in `block in create'

Я предполагаю, что мой файл mongoid.yml неверен, но я не уверен, как заставить его работать. Какие-нибудь мысли?


person Nick ONeill    schedule 29.05.2012    source источник
comment
Вроде решил проблему...   -  person Nick ONeill    schedule 29.05.2012
comment
не хочешь рассказать нам, как? Я предполагаю, что вы сохранили URI, поскольку ответ @Tylers не принят   -  person oma    schedule 09.06.2012


Ответы (3)


Вот как выглядит моя продукция mongoid.yml

<% if ENV['MONGOLAB_URI'] %>
  <% uri = URI.parse(ENV['MONGOLAB_URI']) %>
production:
  <<: *defaults
  sessions:
    default:
      <<: *default_session
      database: <%= uri.path.sub('/','') %>
      username: <%= uri.user %>
      password: <%= uri.password %>
      hosts:
        - <%= uri.host %>:<%= uri.port %>
<% end %>

и это работает для меня

person Kishore Yekkanti    schedule 28.06.2012
comment
Я вижу это, но куда идут переменные? например (uri.path)? Я добавляю это в свои переменные heroku и какой частью uri это должно быть? Можете ли вы показать, как эта переменная будет выглядеть в переменных героку? - person SupremeA; 29.03.2016

В настоящее время соединения с базой данных не могут быть установлены через URI в mongoid. Формат mongoid.yml следующий:

environment:
  host: <%= ENV['MONGOID_HOST'] %>
  port: <%= ENV['MONGOID_PORT'] %>
  username: <%= ENV['MONGOID_USERNAME'] %>
  password: <%= ENV['MONGOID_PASSWORD'] %>
  database: <%= ENV['MONGOID_DATABASE'] %>

Что вам нужно сделать, так это разобрать строку MongoHQ на составные части, чтобы предоставить их в mongoid.yml.

Если хотите, кто-то придумал суть, которая делает это для вас здесь

person Tyler Brock    schedule 29.05.2012

Для набора реплик/не-реплики в MongoHQ:

production:
  sessions:
    default:
      <% if ENV['MONGOHQ_HOST_LIST'] %>
      database: <%= ENV['MONGOHQ_DATABASE'] %>
      username: <%= ENV['MONGOHQ_USER'] %>
      password: <%= ENV['MONGOHQ_PASSWD'] %>
      hosts:
      <% YAML.parse(ENV['MONGOHQ_HOST_LIST']).value.each do |v| %>
        - <%= "#{v[0].value}:#{v[1].value}" %>
      <% end %>
      <% elsif ENV['MONGOHQ_URL'] %>
      uri: <%= ENV['MONGOHQ_URL'] %>
      <% end %>
      options:
        consistency: :eventual
        safe: true
person dB.    schedule 06.11.2012