Heroku で Sinatra アプリを使用していますが、次のエラーが原因でクラッシュし続けます。
app/vendor/bundle/ruby/1.9.1/gems/mongoid-1.2.14/lib/mongoid/config.rb:52 in 'master': Database should be a Mongo::DB, not a nil class
Heroku の指示に従って Mongoid 3.x をセットアップしました。アプリはローカル マシンで動作するため、この問題の原因がわかりません。私の宝石ファイルは次のようになります。
source "https://rubygems.org"
ruby "1.9.3"
gem 'sinatra'
gem 'mongo'
gem 'mongoid'
gem 'bson_ext'
gem 'json'
gem 'nokogiri'
gem 'aws-s3', '0.6.2', :require => 'aws/s3'
gem 'sinatra-reloader'
gem 'debugger'
gem 'thin'
これが私のものmongoid.yml
です:
development:
sessions:
default:
database: db
hosts:
- localhost:27017
production:
sessions:
default:
uri: <%= ENV['MONGOHQ_URL'] %>
options:
skip_version_check: true
safe: true
そして、ここに私のアプリファイルがあります:
require 'bundler/setup'
require 'sinatra'
require 'json'
require 'mongo'
require 'mongoid'
Mongoid.load!('mongoid.yml', :production)
def get_connection
return @db_connection if @db_connection
db = URI.parse(ENV['MONGOHQ_URL'])
db_name = db.path.gsub(/^\//, '')
@db_connection = Mongo::Connection.new(db.host, db.port).db(db_name)
@db_connection.authenticate(db.user, db.password) unless (db.user.nil? || db.user.nil?)
@db_connection
end
db = get_connection
class Model1
include Mongoid::Document
field :name, :type => String
end
uri フィールドを使用しているため、データベース名を指定する必要はありません。なぜデータベースが nil なのかわかりません。