4

まったく新しいRailsプロジェクトを開始したばかりで、完了しようとしている最初のタスクは、オブジェクトを作成してデータベース内に保存することです。オブジェクト、この場合は次のようなURLオブジェクトを自動生成する方法を実行しました。

rails generate scaffold Url domain:string

また、2つの別々のmongoid.yml構成設定をテストしました。1つ目は次のとおりです。

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のcreateメソッドに到達すると、@ 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ファイルは正しくありませんが、これを機能させる方法がわかりません。何かご意見は?

4

3 に答える 3

6

これは私のプロダクション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 %>

そしてこれは私のために働く

于 2012-06-28T14:37:23.310 に答える
5

現在、mongoid のこの時点で、URI を介してデータベース接続を行うことはできません。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 で提供することです。

必要に応じて、誰かがここでこれを行う要点を作成しました

于 2012-05-29T16:50:09.803 に答える
0

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
于 2012-11-06T15:27:29.853 に答える