gulp并运行带有日志记录的django服务器

gulp并运行带有日志记录的django服务器,django,gulp,Django,Gulp,我正在尝试从gulp运行django服务器。虽然我现在已经(大致)激活了virtualenv,然后启动了服务器,但是django服务器没有出现任何输出/错误。我如何在使用gulp时使其显示 gulpfile.js var pjson = require('./package.json'); // Run django server var cmd = 'workon switcher5' gulp.task('runServer', function() { exec('~/virtua

我正在尝试从gulp运行django服务器。虽然我现在已经(大致)激活了virtualenv,然后启动了服务器,但是django服务器没有出现任何输出/错误。我如何在使用gulp时使其显示

gulpfile.js

var pjson = require('./package.json');

// Run django server
var cmd =  'workon switcher5'
gulp.task('runServer', function() {
  exec('~/virtualenvs/' + pjson.name + '/bin/python manage.py runserver', function (err, stdout, stderr) {
    console.log(stdout);
    console.log(stderr);
  });
});
请注意,尽管服务器运行正常。我在控制台中得到错误:

/bin/sh: /Users/User/virtualenvs/switcher5/bin/python: No such file or directory
(不通过gulp运行django服务器正常工作。)

我尝试生成一个进程:

gulp.task('runServer', function(){
  console.info('starting django server');
  var PIPE = {stdio: 'inherit'};
  spawn('~/virtualenvs/' + pjson.name + '/bin/python', ['manage.py', 'runserver'], PIPE);
});
然而,尽管这与
spawn('python',['manage.py','runserver',PIPE)从终端(在通过上述手动运行之前激活virtualenv)失败。
我不清楚这条路出了什么问题(如果有的话)


当它从终端运行时,它现在给出输出,但似乎只是来自django服务器的错误(304的等等),但没有成功的请求出现。

我已经为这个确切的概念挣扎了一段时间。我看到的示例将所有内容都放在一个gulpfile.js中,其中我的内容更加模块化。此外,我在处理之前的Django项目时使用了它,但当我采用分解您的c配置文件

通过创建下面的文件(基于Windows的机器),然后从bash命令行运行“gulp watch”,我终于实现了它:

基本项目文件夹结构:

root folder
|_ project folder
|_ config folder
|_ gulp
   |_ tasks
      runserver.js
      watch.js
|_ gulpfile.js
// Load gulp script modules

require('./gulp/tasks/runserver');
require('./gulp/tasks/watch');
// Kicks off Django server, opens and syncs browser upon changes

// Import packages
var gulp = require('gulp'),
watch = require('gulp-watch'),
browserSync = require('browser-sync').create();

// WATCH for changes to files
gulp.task('watch', function(){
  // Start python django server
  gulp.start('startDjango');

  // Sync browsers to python runserver
  browserSync.init({
    notify: false,
    localOnly: true,
    proxy: {
      target: 'http://localhost:8000/',
    },
    port: process.env.PORT || 8000,
  });

  // Refresh the browser whenever any HTML file is changed    
  watch('./**/*.html', function(){
    browserSync.reload();
  });

... // Other watch activities here

});
gulpfile.js:

root folder
|_ project folder
|_ config folder
|_ gulp
   |_ tasks
      runserver.js
      watch.js
|_ gulpfile.js
// Load gulp script modules

require('./gulp/tasks/runserver');
require('./gulp/tasks/watch');
// Kicks off Django server, opens and syncs browser upon changes

// Import packages
var gulp = require('gulp'),
watch = require('gulp-watch'),
browserSync = require('browser-sync').create();

// WATCH for changes to files
gulp.task('watch', function(){
  // Start python django server
  gulp.start('startDjango');

  // Sync browsers to python runserver
  browserSync.init({
    notify: false,
    localOnly: true,
    proxy: {
      target: 'http://localhost:8000/',
    },
    port: process.env.PORT || 8000,
  });

  // Refresh the browser whenever any HTML file is changed    
  watch('./**/*.html', function(){
    browserSync.reload();
  });

... // Other watch activities here

});
runserver.js

// Starts python django server

// Import packages
var gulp = require('gulp'),
spawn = require('child_process').spawn;

// Start the Django runserver
gulp.task('startDjango', function(cb){
  var projDir = 'C:\\<<project folder>>'
  var envDir = 'C:\\<<virtual environment directory>>'
  var cmd = spawn('python', [projDir + '\\manage.py', 'runserver'],
             {cwd: envDir, stdio: 'inherit'}
            );
  cmd.on('close', function(code) {
    console.log('startDjango exited with code ' + code);
    cb(code);
  });
});

希望这能帮助其他正在挣扎的人。

我已经为这个确切的概念挣扎了一段时间。我所看到的示例将所有内容都放在一个gulpfile.js中,其中的内容更加模块化。此外,我让它与之前的Django项目一起工作,但当我采用分解配置文件的方法时,它与我的下一个项目一起工作

通过创建下面的文件(基于Windows的机器),然后从bash命令行运行“gulp watch”,我终于实现了它:

基本项目文件夹结构:

root folder
|_ project folder
|_ config folder
|_ gulp
   |_ tasks
      runserver.js
      watch.js
|_ gulpfile.js
// Load gulp script modules

require('./gulp/tasks/runserver');
require('./gulp/tasks/watch');
// Kicks off Django server, opens and syncs browser upon changes

// Import packages
var gulp = require('gulp'),
watch = require('gulp-watch'),
browserSync = require('browser-sync').create();

// WATCH for changes to files
gulp.task('watch', function(){
  // Start python django server
  gulp.start('startDjango');

  // Sync browsers to python runserver
  browserSync.init({
    notify: false,
    localOnly: true,
    proxy: {
      target: 'http://localhost:8000/',
    },
    port: process.env.PORT || 8000,
  });

  // Refresh the browser whenever any HTML file is changed    
  watch('./**/*.html', function(){
    browserSync.reload();
  });

... // Other watch activities here

});
gulpfile.js:

root folder
|_ project folder
|_ config folder
|_ gulp
   |_ tasks
      runserver.js
      watch.js
|_ gulpfile.js
// Load gulp script modules

require('./gulp/tasks/runserver');
require('./gulp/tasks/watch');
// Kicks off Django server, opens and syncs browser upon changes

// Import packages
var gulp = require('gulp'),
watch = require('gulp-watch'),
browserSync = require('browser-sync').create();

// WATCH for changes to files
gulp.task('watch', function(){
  // Start python django server
  gulp.start('startDjango');

  // Sync browsers to python runserver
  browserSync.init({
    notify: false,
    localOnly: true,
    proxy: {
      target: 'http://localhost:8000/',
    },
    port: process.env.PORT || 8000,
  });

  // Refresh the browser whenever any HTML file is changed    
  watch('./**/*.html', function(){
    browserSync.reload();
  });

... // Other watch activities here

});
runserver.js

// Starts python django server

// Import packages
var gulp = require('gulp'),
spawn = require('child_process').spawn;

// Start the Django runserver
gulp.task('startDjango', function(cb){
  var projDir = 'C:\\<<project folder>>'
  var envDir = 'C:\\<<virtual environment directory>>'
  var cmd = spawn('python', [projDir + '\\manage.py', 'runserver'],
             {cwd: envDir, stdio: 'inherit'}
            );
  cmd.on('close', function(code) {
    console.log('startDjango exited with code ' + code);
    cb(code);
  });
});

希望这能帮助其他正在挣扎的人。:)

问题中的关键问题是让gulp启动virtualenv,然后启动django服务器,同时通过stdout将其输出传递给节点

不幸的是,另一个答案没有实现这一点,因为它没有同时启动VirtualNV。
下面的解决方案确实有效。 (注意:如果您没有在venv/文件夹中使用virtualenv,则只需将下面的内容调整到相关位置即可

// Activates a virtualenv and runs django server
gulp.task('runServer', function(cb) {
  var cmd = spawn('venv/bin/python', ['manage.py', 'runserver'], {stdio: 'inherit'});
  cmd.on('close', function(code) {
    console.log('runServer exited with code ' + code);
    cb(code);
  });
});

问题中的关键问题是让gulp启动virtualenv,然后启动django服务器,同时通过stdout将其输出传递给节点

不幸的是,另一个答案没有实现这一点,因为它没有同时启动VirtualNV。
下面的解决方案确实有效。 (注意:如果您没有在venv/文件夹中使用virtualenv,则只需将下面的内容调整到相关位置即可

// Activates a virtualenv and runs django server
gulp.task('runServer', function(cb) {
  var cmd = spawn('venv/bin/python', ['manage.py', 'runserver'], {stdio: 'inherit'});
  cmd.on('close', function(code) {
    console.log('runServer exited with code ' + code);
    cb(code);
  });
});

python解释器的路径正确吗?是的,它运行服务器。python解释器的路径正确吗?是的,它运行服务器。感谢是,使用
spawn
子进程是我找到的最佳方法。这样,django的runserver中的错误通过
stdi浮出水面,进入gulpo
不幸的是,您的回答没有解释如何同时启动virtualenv。事实上,它确实解释了。runserver.js中的变量envDir设置了到环境的路径,并从那里运行python,同时指向项目目录以运行manage.py命令。也许这与我们设置其他内容的方式不同,但是我共享的代码完全符合您的要求。谢谢,是的,我发现使用
spawn
子进程是最好的方法。这样,django的runserver中的错误通过
stdio
出现在gulp中。不幸的是,您的回答没有解释如何同时启动virtualenv。事实上,变量envDirunserver.js中的r设置了到环境的路径,并从那里运行python,同时指向项目目录以运行manage.py命令。也许这与我们设置其他内容的方式不同,但我共享的代码完全符合您的要求。