Grunt Umgebungsvariablen nicht Gesetzt, Bis Alle Tasks Geladen

Ich bin mit der npm Module grunt env und load-grunt-config in meinem Projekt. grunt env Griffe Umgebungsvariablen für Sie, während load-grunt-config Griffe, gut, lädt die grunt Konfiguration für Sie. Sie können Ihre Aufgaben auch in anderen Dateien, dann load-grunt-config bundle erhalten Sie bis und haben grunt laden & verbrauchen Sie für Sie. Sie können auch eine aliases.js - Datei, mit Aufgaben, die Sie kombinieren möchten, zusammen in einem task ausgeführt werden einer nach dem anderen. Es ist ähnlich wie die grunt.registerTask Aufgabe in der ursprünglichen Gruntfile.js. Ich habe alle meine grunt Aufgaben in einem separaten grunt/ Ordner unter dem root-Ordner mit den wichtigsten Gruntfile, ohne extra Unterordner, wie vorgeschlagen, durch die load-grunt-config README-Datei.md auf Github. Hier ist meine abgespeckte Gruntfile:

module.exports = function(grunt) {

    'use strict';

    require('time-grunt')(grunt);

    //function & property declarations
    grunt.initConfig({

        pkg: grunt.file.readJSON('package.json')

    });

    require('load-grunt-config')(grunt, {
        init: true,
        loadGruntConfig: {
            scope: 'devDependencies', 
            pattern: ['grunt-*', 'time-grunt']
        }
    });

};

In der Theorie, Einstellung, all diese Dateien in der richtigen Art und Weise für load-grunt-config zu laden, sollte genau die selbe sein, nur mit einem Gruntfile.js. Allerdings scheine ich zu haben, laufen Sie in einen kleinen Haken. Es scheint die Umgebungsvariablen gesetzt, die unter der env Aufgabe nicht bekommen, legen Sie für die nachfolgenden grunt Aufgaben, aber von der Zeit node Prozesse Ihre Aufgaben, in diesem Fall ein express server.

grunt env Aufgabe:

module.exports = {

    //environment variable values for developers
    //creating/maintaining site
    dev: {
        options: {
            add: {
                NODE_ENV: 'dev',
                MONGO_PORT: 27017,
                SERVER_PORT: 3000
            }
        }
    }
};

grunt-shell-spawn Aufgabe:

//shell command tasks
module.exports = {

    //starts up MongoDB server/daemon
    mongod: {
        command: 'mongod --bind_ip konneka.org --port ' + (process.env.MONGO_PORT || 27017) + ' --dbpath C:/MongoDB/data/db --ipv6',
        options: {
            async: true, //makes this command asynchronous
            stdout: false, //does not print to the console
            stderr: true, //prints errors to the console
            failOnError: true, //fails this task when it encounters errors
            execOptions: {
                cwd: '.'
            }
        }
    }
};

grunt express Aufgabe:

module.exports = {

    //default options
    options: {
        hostname: '127.0.0.1', //allow connections from localhost
        port: (process.env.SERVER_PORT || 3000), //default port

    },

    prod: {
        options: {
            livereload: true, //automatically reload server when express pages change
            //serverreload: true, //run forever-running server (do not close when finished)
            server: path.resolve(__dirname, '../backend/page.js'), //express server file
            bases: 'dist/' //watch files in app folder for changes
        }
    }
};

aliases.js Datei (grunt-load-config's eine Kombination von Aufgaben, so dass Sie laufen, eins nach dem anderen):

module.exports = {
    //starts forever-running server with "production" environment
    server: ['env:prod', 'shell:mongod', 'express:prod', 'express-keepalive']
};

Teil backend/env/prod.js (environment-specific Express-Konfiguration geladen, wenn NODE_ENV ist "prod", nach dem Vorbild der MEAN.JS):

'use strict';

module.exports = {
    port: process.env.SERVER_PORT || 3001,
    dbUrl: process.env.MONGOHQ_URL || process.env.MONGOLAB_URI || 'mongodb://konneka.org:' + (process.env.MONGO_PORT || 27018) + '/mean'
};

Teil backend/env/dev.js (environment-specific Express-Konfiguration für dev - Umgebung geladen, wenn das `NODE_ENV variable nicht gesetzt oder ist ("dev"):

module.exports = {
    port: process.env.SERVER_PORT || 3000,
    dbUrl: 'mongodb://konneka.org:' + (process.env.MONGO_PORT || 27017) + '/mean-dev'
};

Teil backend/page.js (meine Express-Konfiguration Seite, auch nach dem Vorbild MEAN.JS):

'use strict';
var session = require('express-session');
var mongoStore = require('connect-mongo')(session);
var express = require('express');
var server = express();

...

//create the database object
var monServer = mongoose.connect(environ.dbUrl);

//create a client-server session, using a MongoDB collection/table to store its info
server.use(session({
    resave: true,
    saveUninitialized: true,
    secret: environ.sessionSecret,
    store: new mongoStore({
        db: monServer.connections[0].db, //specify the database these sessions will be saved into
        auto_reconnect: true
    })
}));

...

//listen on port related to environment variable
server.listen(process.env.SERVER_PORT || 3000);

module.exports = server;

Wenn ich grunt server ich bekommen:

$ cd /c/repos/konneka/ && grunt server
Running "env:prod" (env) task

Running "shell:mongod" (shell) task

Running "express:prod" (express) task

Running "express-server:prod" (express-server) task
Web server started on port:3000, hostname: 127.0.0.1 [pid: 3996]

Running "express-keepalive" task
Fatal error: failed to connect to [konneka.org:27018]


Execution Time (2014-08-15 18:05:31 UTC)
loading tasks        38.3s  █████████████████████████████████ 79%
express-server:prod   8.7s  ████████ 18%
express-keepalive     1.2s  ██ 2%
Total 48.3s

Nun, ich kann nicht scheinen, um die Datenbank angeschlossen, in den ersten Platz, aber ignorieren, dass für jetzt. Beachten Sie, dass der server gestartet auf port 3000, was bedeutet, dass während der Ausführung der grunt express:prod Aufgabe SERVER_PORT ist auch nicht so der port festgelegt wird, zu 3000. Es gibt zahlreiche weitere Beispiele wie dieses, wo eine Umgebungsvariable nicht gesetzt ist, so ist meine app verwendet den Standard. Beachten Sie jedoch, dass session versucht, eine Verbindung zu der Datenbank auf port 27018 (und scheitert), so MONGO_PORT sich nicht dorthin setzen schließlich.

Hätte ich einfach versucht, die grunt server Aufgabe, konnte ich Kreide es bis zu load-grunt-config ausführen des tasks parallel statt nacheinander oder einige andere Fehler, aber selbst wenn ich versuche die Aufgaben, one-by-one, wie laufen grunt env:prod shell:mongod express-server:prod express-keepalive bekomme ich ähnliche (falsche) Ergebnisse, also entweder grunt oder grunt env führen Sie die Aufgaben parallel, wie gut, oder etwas anderes Los ist.

Was ist denn hier Los? Warum sind die Umgebungsvariablen nicht richtig gesetzt für später grunt Aufgaben? Wann sind Sie schließlich, und warum dann statt einer anderen Zeit? Wie kann ich machen, Sie zu erhalten, legen Sie für grunt Aufgaben selbst eher als nach, vorausgesetzt, es gibt sogar einen Weg?

  • Ich arbeite bis eine vollständige Testfall für diese, aber mein Erster Gedanke ist, dass grunt env ist nur das setzen der Umgebungsvariablen einmal Grunzen ausgeführt hat, die alle seine Aufgaben. Mögliche Lösung verbinden Sie das env-Aufgabe zu den anderen Aufgaben.
  • Ich versuche zu kombinieren, die Aufgaben. Das ist, warum ich bin mit load-grunt-config und grunt's eigene Methoden wie registerTask. Aber ich weiß was du meinst, und ich nehme an, ich werde versuchen das später.
  • Könnten wir die Ausgabe von tree (oder einige Einsicht in das, was Dateien und Ordner sind in dem Bild)?
  • Ich bin auf Windows mit mSysGit. Gibt es eine andere Möglichkeit? Ich legte die grunt Aufgaben in eine separate grunt/ Ordner, wie vorgeschlagen, durch load-grunt-config. Keine Unterordner, nur die grunt/ Ordner.
  • Ich habe gerade es auf die Frage. Ich entschuldige mich, nehme ich an, ich nahm an, es war nicht wichtig, die Frage oder "macht doch jeder so". Werde ich jemals lernen? Ich dachte auch, es wäre zu viel zu der Frage.
InformationsquelleAutor trysis | 2014-08-15
Schreibe einen Kommentar