Mongoose 未在 Ubuntu Ubuntu 14.04 上连接

Mongoose not connecting on Ubuntu Ubuntu 14.04

我有一个使用 MongoDB 和 mongoose 在 Hapi 上构建的节点应用程序。在本地,我可以毫无问题地使用该应用程序。我可以连接到数据库、添加数据、查找等等

我在 Digital Ocean 上创建了一个 Ubuntu 14.04 x64 droplet。

我可以通过 ssh 进入我的 Droplet 并验证我的数据库是否具有正确的名称。我正在使用 dokku-alt 进行部署,并且我已使用 dokku 的 mongodb:link appName mydb

将数据库名称链接到应用程序

我在部署应用程序后遇到问题,它会挂起并最终超时。经过大量调试和注释掉代码后,我发现每当我尝试像这样点击 mongo 时,应用程序都会挂起:

var User = request.server.plugins.db.User;
User
  .findOne({ id: request.auth.credentials.profile.raw.id })
  .exec(function(err, user){
    // do something
  });

没有这个,应用程序加载正常,尽管没有数据。所以我的想法是 mongoose 永远无法正确连接。

我正在使用 g运行t-shell-spawn 来 运行 一个检查 mongo 是否已经 运行ning 的脚本,如果不是它启动它。我不是 100% 确定 droplet 需要这个,但我在本地遇到问题 mongo 已经 运行ning... 脚本:

/startMongoIfNotRunning.sh

if pgrep mongod; then
  echo running;
else
  mongod --quiet --dbpath db/;
fi

exit 0;

/Gruntfile.js

shell: {
  make_dir: {
    command: 'mkdir -p db'
  },
  mongodb: {
    command: './startMongoIfNotRunning.sh',
    options: {
      stdin: false,
    }
  }
},

下面是我定义数据库位置的方式:

/index.js

server.register([
  { register: require('./app/db'), options: { url: process.env.MONGODB_URL || 'mongodb://localhost:27017/mydb' } },
....

/app/db/index.js

var mongoose = require('mongoose');
var _ = require('lodash-node');
var models = require('require-all')(__dirname + '/models');

exports.register = function(plugin, options, next) {

  mongoose.connect(options.url, function() {
    next();
  });

  var db = mongoose.connection;

  plugin.expose('connection', db);
  _.forIn(models, function(value, key) {
    plugin.expose(key, value);
  });

};

exports.register.attributes = {
  name: 'db'
};

我的应用正在 db/ 中寻找数据库文件。会不会是 dokku 的 mongodb:link appName mydb 把它链接到了错误的位置?也许 process.env.MONGODB_URL 设置不正确?我真的不知道从这里去哪里。

事实证明,我的问题的解决方案是在我的 Droplet 的主机文件中添加一个条目以指向 mongo 数据库 url:

127.0.0.1 mongodb.myurl.com

出于某种原因,使用 Dokku 将数据库链接到我的应用程序并没有添加这一点。我会认为它是自动的。当我将数据库链接到应用程序时,应用程序容器的主机文件确实获得了 mongodb 条目。