2014-09-29 100 views
2

每当我做“咕噜服务器”,它会自动给我这个错误:咕噜服务器错误,EMFILE

Running "watch" task 
Waiting... 
Warning: EMFILE, too many open files 

和未来这样的:

(node) warning: Recursive process.nextTick detected. This will break in the next version of node. Please use setImmediate for recursive deferral. 

这通常的处理办法我已经看到了网络上正在改变名称如下所示:

grunt.registerTask('uglify', ['jshint', 'uglify']); 

grunt.registerTask('myuglify', ['jshint', 'uglify']); 

虽然我的问题不能用这种方法修复,因为我不使用相同的名称作为任务。

我gruntfile.js:

module.exports = function(grunt){ 
grunt.initConfig({ 
    sass: { 
    dist: { 
     files: { 
     'styles/css/main.css': 'styles/sass/main.scss' 
     } 
    } 
    } 

    ,watch: { 
    options:{livereload:true}, 
    sass:{ 
     files:'styles/sass/*.scss', 
     tasks:'sass' 
     } 
    }, 

    express:{ 
     all:{ 
      options:{ 
       port:9000, 
       hostname:'localhost', 
       bases:'.', 
       livereload:true 

      } 

     } 
    } 
}); 

grunt.loadNpmTasks('grunt-contrib-sass'); 
grunt.loadNpmTasks('grunt-contrib-watch'); 
grunt.loadNpmTasks('grunt-express'); 
grunt.registerTask('default', ['sass']) 
grunt.registerTask('server',['express','watch']) 

} 

任何想法?

+0

为什么在'express'和'watch'配置中都有'livereload'?这是故意的吗? – jsalonen 2014-09-29 18:04:05

+0

是的,是的。因为我希望它能够重新加载。这就是教程所说的 – 2014-09-29 18:13:44

回答

2

我今天遇到了这个浪费时间的错误,并在GitHub的仓库解决方案并没有为我工作。在搜索与process.nextTick弃用警告相关的此问题后,我得出结论认为,依赖于观看的文件/ glob运行任务是潜在的原因。

这里的Gruntfile为我的网站:

module.exports = function (grunt) { 
    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     watch: { 
      dev: { 
       files: ['**/*.js', 'public/stylesheets/**/*.scss'], 
       tasks: ['express:dev'], 
       options: { 
        spawn: false 
       } 
      } 
     }, 
     express: { 
      dev: { 
       options: { 
        script: 'server.js', 
        node_env: 'development' 
       } 
      } 
     } 
    }); 

    grunt.loadNpmTasks('grunt-contrib-watch'); 
    grunt.loadNpmTasks('grunt-express-server'); 

    grunt.registerTask('default', ['express:dev', 'watch']); 
}; 

我从我的watch任务,重新启动快速删除JS文件解决了这个问题。对我来说,上述任务的下方配置工作正常:

watch: { 
    dev: { 
     files: ['public/stylesheets/**/*.scss'], 
     tasks: ['express:dev'], 
     options: { 
      spawn: false 
     } 
    } 
}, 

This SO answer提供了一个类似的修复。有趣的是,我从未在我的Ubuntu机器上遇到过这个问题;当我克隆我的存储库时,它今天发生在我的MacBook上。