2

Heroku(MongoHQ)でSinatraを使用してMongoidを起動して実行しようとしています。Railsでの以前の経験ですが、スタックとSinatraでの初めての経験です。

Web上の簡単な例の1つから始めました(app.rb):

require 'rubygems'
require 'sinatra'
require 'mongo'
require 'mongoid'

configure do
  Mongoid.load!('mongoid.yml')

  Mongoid.configure do |config|
    if ENV['MONGOHQ_URL']
      conn = Mongo::Connection.from_uri(ENV['MONGOHQ_URL'])
      uri = URI.parse(ENV['MONGOHQ_URL'])

      # problem happens here 
      config.master = conn.db(uri.path.gsub(/^\//, ''))
    else
      config.master = Mongo::Connection.from_uri("mongodb://localhost:27017").db('test')
    end
  end
end


# Models
class Counter
  include Mongoid::Document

  field :count, :type => Integer

  def self.increment
    c = first || new({:count => 0})
    c.inc(:count, 1)
    c.save
    c.count
  end
end

# Controllers
get '/' do
  "Hello visitor n" + Counter.increment.to_s
end

参考までに、mongoid.yml次のようになります。

development:
  sessions:
    default:
      database: localhost
production:
  sessions:
    default:
      uri: <%= ENV['MONGOHQ_URL'] %>

によるapp.rb (# problem happens here)と、私のログには次のように書かれています。

/app/app.rb:15:in `block (2 levels) in <top (required)>': undefined method `master=' for Mongoid::Config:Module (NoMethodError)
    from /app/vendor/bundle/ruby/1.9.1/gems/mongoid-3.0.3/lib/mongoid.rb:112:in `configure'
from /app/app.rb:11:in `block in <top (required)>'
from /app/vendor/bundle/ruby/1.9.1/gems/sinatra-1.3.2/lib/sinatra/base.rb:1273:in `configure'
from /app/app.rb:8:in `<top (required)>'

私はまた、以下を含むバリアントを試しました:

config.master = Mongo::Connection.from_uri(ENV['MONGOHQ_URL']).db('appXXXXX')
Mongoid.database = Mongo::Connection.from_uri(ENV['MONGOHQ_URL']).db('appXXXXXXX')

しかし、同じエラーが発生します。

undefined method `master` for Mongoid::Config:Module (NoMethodError)

また:

undefined method `database=` for Mongoid::Config:Module (NoMethodError)

私は何が欠けていますか?

4

2 に答える 2

3

あるべきではない

configure do
  Mongoid.load!('mongoid.yml')
end

足りる?

それは、mongidドキュメントが言っていることです。MONGOHQ_URL環境変数には、データベースへの接続を初期化するためのすべての情報がすでに含まれています。

于 2012-08-05T12:56:14.457 に答える
3

したがって、Mongoid 3.xを使用していました...これは:

  • 10genドライバーを使用しません:Mopedを使用します
  • 使用しませんconfig.master

Web全体にある上記の正規のサンプルコードは、Mongoid 2.xでそのまま使用できるため、当面は元に戻しました。

ありがとう!

于 2012-08-05T23:09:03.137 に答える