1

私はこの男がここでやっていることと同じことをしようとしています MongoLab で Heroku に MongoDB データベースをセットアップするにはどうすればよいですか?

アプリは Amazon EC2 で動作し、MongoLabs アドオンを使用して Heroku にデプロイしています。

Mongo接続をMongo URIに変更するには、正確に何を入力すればよいですか?

Heroku ドキュメント

/** https://devcenter.heroku.com/articles/getting-started-with-nodejs#write-your-app */

var mongo = require('mongodb');

var mongoUri = process.env.MONGOLAB_URI ||
  process.env.MONGOHQ_URL ||
  'mongodb://localhost/mydb';

mongo.Db.connect(mongoUri, function (err, db) {
  db.collection('mydocs', function(er, collection) {
    collection.insert({'mykey': 'myvalue'}, {safe: true}, function(er,rs) {
    });
  });
});

app.js

/** app.js */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path')
  , EmployeeProvider = require('./employeeprovider').EmployeeProvider;

var app = express();

app.configure(function(){
  app.set('port', process.env.PORT || 8080);
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.set('view options', {layout: false});
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(require('stylus').middleware(__dirname + '/public'));
  app.use(express.static(path.join(__dirname, 'public')));
});

app.configure('development', function(){
  app.use(express.errorHandler());
});

var employeeProvider= new EmployeeProvider('localhost', 27017);

//Routes

app.get('/', function(req, res){
  employeeProvider.findAll(function(error, emps){
       res.render('index', {
            title: 'Employees',
            employees:emps
        });
   });
});

app.get('/employee/new', function(req, res) {
    res.render('employee_new', {
        title: 'New Employee'
    });
});

//save new employee
app.post('/employee/new', function(req, res){
    employeeProvider.save({
    title: req.param('title'),
        name: req.param('name')
    }, function( error, docs) {
        res.redirect('/')
    });
});

app.listen(8080);

従業員provider.js

var Db = require('mongodb').Db;
var Connection = require('mongodb').Connection;
var Server = require('mongodb').Server;
var BSON = require('mongodb').BSON;
var ObjectID = require('mongodb').ObjectID;

EmployeeProvider = function(host, port) {
  this.db= new Db('node-mongo-employee', new Server(host, port, {safe: true},          {auto_reconnect: true}, {}));
  this.db.open(function(){});
};


EmployeeProvider.prototype.getCollection= function(callback) {
  this.db.collection('employees', function(error, employee_collection) {
    if( error ) callback(error);
    else callback(null, employee_collection);
  });
};

//find all employees
EmployeeProvider.prototype.findAll = function(callback) {
    this.getCollection(function(error, employee_collection) {
      if( error ) callback(error)
      else {
        employee_collection.find().toArray(function(error, results) {
          if( error ) callback(error)
          else callback(null, results)
        });
       }
    });
};

//save new employee
EmployeeProvider.prototype.save = function(employees, callback) {
    this.getCollection(function(error, employee_collection) {
      if( error ) callback(error)
      else {
        if( typeof(employees.length)=="undefined")
          employees = [employees];

        for( var i =0;i< employees.length;i++ ) {
          employee = employees[i];
          employee.created_at = new Date();
        }

        employee_collection.insert(employees, function() {
          callback(null, employees);
        });
      }
    });
};

exports.EmployeeProvider = EmployeeProvider;

localhost の代わりに URI を使用するように employeeProvider を変更するにはどうすればよいですか?

4

3 に答える 3

10
var mongoUri = process.env.MONGOLAB_URI ||
  process.env.MONGOHQ_URL ||
  'mongodb://localhost/mydb';

この行は、何も変更しなくても既に正しいはずです。値の 1 つが存在するとすぐにコードが短絡するため、「mongodb://localhost/mydb」は環境変数に MONGOLAB_URI または MONGOHQ_URL のいずれも存在しない場合にのみ使用されます。

とはいえ、特定の Heroku アプリが両方の MongoDB プロバイダーを使用していない可能性があるため、使用する予定の変数名のみを含めることは理にかなっています。たとえば、私のアプリには次のものがあります。

var mongoUri = process.env.MONGOLAB_URI || 'mongodb://localhost/test'
于 2013-10-14T23:38:55.227 に答える
1

最初にNODE_ENV環境を確認してください

$ heroku config
=== ### Config Vars
MONGODB_URI:           mongodb://heroku_lhwpq2p3:sdvsdvsdvds@sdvsdv.mlab.com:dsvsd/heroku_lsdv
NODE_ENV:              production
NPM_CONFIG_PRODUCTION: true

var に入れた名前

mongoUri = process.env.MONGOLAB_URI || localhost:..

する必要があります:

var mongoUri = process.env.MONGODB_URI || localhost:..

それでもエラーが続く場合は、次のようにNODE_ENV環境変数を開発から本番に設定する必要があります。

$ heroku config:set NODE_ENV="production"
$ heroku config:set NPM_CONFIG_PRODUCTION=true
于 2017-01-05T16:34:06.250 に答える
0

私はMongoHQを使用していましたが、同様に、最初にデータベースのアドオンでユーザーを作成し、URIに資格情報を追加する必要があります(mongoアドオンにuriが表示されるはずです)例:

mongodb://user:pass@paulo.mongohq.com:10000/app12345678

于 2013-10-13T12:32:10.453 に答える