首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sinatra,Mongoid,Heroku,MongoHQ:连接Mongodb

Sinatra,Mongoid,Heroku,MongoHQ:连接Mongodb
EN

Stack Overflow用户
提问于 2012-08-04 07:21:42
回答 2查看 2.6K关注 0票数 2

尝试让Mongoid在Heroku (MongoHQ)上与Sinatra一起运行。以前有过使用Rails的经验,但第一次使用堆栈和Sinatra。

从web上的一个简单示例(app.rb)开始:

代码语言:javascript
复制
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如下所示:

代码语言:javascript
复制
development:
  sessions:
    default:
      database: localhost
production:
  sessions:
    default:
      uri: <%= ENV['MONGOHQ_URL'] %>

根据app.rb (# problem happens here),我的日志是这样写的:

代码语言:javascript
复制
/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)>'

我也尝试过各种变体,包括:

代码语言:javascript
复制
config.master = Mongo::Connection.from_uri(ENV['MONGOHQ_URL']).db('appXXXXX')
Mongoid.database = Mongo::Connection.from_uri(ENV['MONGOHQ_URL']).db('appXXXXXXX')

但是得到相同的错误:

代码语言:javascript
复制
undefined method `master` for Mongoid::Config:Module (NoMethodError)

或者:

代码语言:javascript
复制
undefined method `database=` for Mongoid::Config:Module (NoMethodError)

我遗漏了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-06 07:09:03

所以使用Mongoid 3.x ...其中:

  • 不使用10gen驱动程序:使用config.master

  • 不使用Moped

上面的规范示例代码在网络上到处都是,它可以在Mongoid 2.x中开箱即用,所以暂时还是使用它吧。

谢谢!

票数 3
EN

Stack Overflow用户

发布于 2012-08-05 20:56:14

不应该是

代码语言:javascript
复制
configure do
  Mongoid.load!('mongoid.yml')
end

足够的?

这就是mongid docs所说的。MONGOHQ_URL环境变量已经包含初始化到数据库的连接所需的所有信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11804510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档