grunt exec 冻结,期待来自 django collectstatic 的 0 状态代码

grunt exec freezes, expecting 0 status code from django collectstatic

我试图让 grunt exec 在构建静态后执行 django collectstatic 命令。所以,在我的 Gruntfile.js 中我有:

grunt.initConfig({
    ...
    exec: {
        collectstatic: {
            cwd: '../../',
            cmd: 'python manage.py collectstatic --clear'
        }
    }
    ...
}

当我尝试使用 grunt exec:collectstatic --verbose 执行此命令时,它没有诅咒但冻结并显示以下输出:

Running "exec:collectstatic" (exec) task
Verifying property exec.collectstatic exists in config...OK
File: [no files]

python manage.py collectstatic --clear
Expecting exit code 0

看起来好像没有收到来自 django 的退出代码。我检查过,如果 django returns 正确的状态代码,它似乎是这样做的:

$ python manage.py collectstatic --clear
$ echo $?
0

怎么了?

默认情况下,django 的 collectstatic 命令需要用户输入(确认确实应该收集静态文件),但 grunt 无法将用户的输入传递到 collectstatic 命令。这将导致冻结,因为 collectstatic 需要输入一些东西,但 grunt 没有提供任何东西。

可以通过在 collectstatic 命令中添加 --noinput 参数来更改,因此整个命令将如下所示:

python manage.py collectstatic --clear --noinput

这将解决您的问题。