尝试让Mongoid在Heroku (MongoHQ)上与Sinatra一起运行。以前有过使用Rails的经验,但第一次使用堆栈和Sinatra。
从web上的一个简单示例(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)我遗漏了什么?
发布于 2012-08-06 07:09:03
所以使用Mongoid 3.x ...其中:
config.master
上面的规范示例代码在网络上到处都是,它可以在Mongoid 2.x中开箱即用,所以暂时还是使用它吧。
谢谢!
发布于 2012-08-05 20:56:14
不应该是
configure do
Mongoid.load!('mongoid.yml')
end足够的?
这就是mongid docs所说的。MONGOHQ_URL环境变量已经包含初始化到数据库的连接所需的所有信息。
https://stackoverflow.com/questions/11804510
复制相似问题