0

そのため、さまざまなことを試した後、Herokuを使用してMongoLabサーバーに接続しました。唯一の問題は、実際に自分のサイトにアクセスする前に、Process exited with status 1(以下の完全なログ)が表示されることです。アプリは私のローカルサーバーで完全に正常に実行されます。以下はapp.jsコードです。アプリ自体はbrads-testing.herokuapp.comにあります。

app.js

//requires and start up app
var express = require('express');
var mongoose = require('mongoose')
  , dbURI = 'localhost/test';
var app = express();

//configures app for production, connects to mongoLab databse rather than localhost
app.configure('production', function () {
    //app.use(express.logger());
    console.log("production!");
    dbURI = 'mongodb://USERNAME:PASSWORD@ds037387.mongolab.com:37387/test';
});

//configures app for general stuff needed
app.configure(function () {
    //app.use(express.logger());
    app.use(express.bodyParser());
    app.use(express.static(__dirname + '/static'));
});

//tries to connect to database. If it does, connected set to true. If not, connected stays false
var connected = false;
mongoose.connect(dbURI);
mongoose.connection.on('open', function () {
    console.log("connected!");
    connected = true;
    //creates new schema for object post and saves it to the database
    var postSchema = new mongoose.Schema({
        body: String
    });

    var Post = mongoose.model('Post', postSchema);

    app.set('views', __dirname + '/views');
    app.set('view engine','jade');

    app.get('/', function(request, response) {
        response.render('index');
    });

    app.post('/result', function(request, response) {
    if (connected) {
        var post = new Post({body: request.body.text});
        console.log(post);
        post.save(function (err) {
            if (err) {
                console.log("error!");
            } else {
                console.log("saved!");
            }
        });

        Post.find(function (err, posts) {
            if (!err) {
                console.log("found!");
                console.log(posts);
                response.render('result', {posts: posts});
            } else {
                connected = false;
                var error = "The server had an issue sending/executing the query..."
                response.render('result_error', {error: error});
            }
        });
        } else {
        var error = "The server didn't end up connecting..."
        response.render('result_error', {error: error});
        }
    });

    app.get('/result', function (request, response) {
        if (connected) {
        Post.find(function (err, posts) {
            if (!err) {
                console.log("found!");
                console.log(posts);
                response.render('result', {posts: posts});
            } else {
                connected = false;
                var error = "The server had an issue sending/executing the query..."
                response.render('result_error', {error: error});
            }
        });
        } else {
            var errorText = "The server didn't end up connecting..."
            response.render('result_error', {error: errorText});
        }
    });

    app.listen(process.env.PORT || 5000);

});
mongoose.connection.on('error', console.error.bind(console, 'connection error:'));

ターミナルログ

2012-08-22T19:19:26+00:00 heroku[web.1]: Starting process with command `node app.js`
2012-08-22T19:19:26+00:00 heroku[web.1]: Stopping all processes with SIGTERM
2012-08-22T19:19:28+00:00 app[web.1]: production!
2012-08-22T19:19:28+00:00 app[web.1]: connected!
2012-08-22T19:19:28+00:00 heroku[web.1]: State changed from starting to up
2012-08-22T19:19:29+00:00 heroku[web.1]: Process exited with status 1

悲しいことに、connected!メッセージとProcess exited with status 1は互換性があります。一方が他方の前に来ることもあれば、その逆のこともあります。うまくいけば、誰かが助けることができます。

4

1 に答える 1

0

もう少しログ情報を取得するとよいでしょう。その代わりに、ご自分の環境で試していただきたいことがいくつかあります。

  • 一部のドライバーは、MongoDB のすべてのバージョンで動作しないことがわかっています。MongoLab は、現時点で最新の安定したコードラインである 2.0.x を実行しています。しかし、2.2.x GA リリースが近づいているため、2.2.x の最新の開発リリースを必要とするいくつかのドライバー、特にいくつかのドライバー バージョンがあります。Mongoose がその 1 つかどうかはわかりませんが、MongoLab インスタンスが実行されているのと同じバージョンをローカルで実行してみてください。

  • MongoLab データベースは認証モードで実行され、ユーザーには自分のデータベースに対する権限のみが与えられます (明らかなセキュリティ上の理由から)。これは、一部のコマンド (すべてのデータベースのリストなど) が失敗することを意味します。したがって、ローカル データベースを認証モードで実行し、管理者以外のユーザーとして認証してみてください。

于 2012-08-23T01:49:25.250 に答える