gulp并运行带有日志记录的django服务器
我正在尝试从gulp运行django服务器。虽然我现在已经(大致)激活了virtualenv,然后启动了服务器,但是django服务器没有出现任何输出/错误。我如何在使用gulp时使其显示 gulpfile.jsgulp并运行带有日志记录的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
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命令。也许这与我们设置其他内容的方式不同,但我共享的代码完全符合您的要求。