Heroku 部署,Django pipeline 中 Yuglify 找不到文件

2 投票
1 回答
1833 浏览
提问于 2025-04-18 17:34

我在部署的时候尝试运行 collectstatic,但遇到了以下错误:

pipeline.exceptions.CompressorError: /usr/bin/env: yuglify: 没有这样的文件或目录

但是当我手动运行 collectstatic 时,一切都正常:

后处理了 'stylesheets/omnibase-v1.css',结果是 'stylesheets/omnibase-v1.css';后处理了 'js/omnijs-v1.js',结果是 'js/omnijs-v1.js'

我已经全局安装了 Yuglify。如果我运行 'heroku run yuglify',界面会弹出来并正常运行。现在只是在部署的时候遇到问题。我使用的是多构建包,包含 NodeJS 和 Python。有没有人能帮帮我?

我的包信息,供参考:

{
  "author": "One Who Sighs",
  "name": "sadasd",
  "description": "sadasd Dependencies",
  "version": "0.0.0",
  "homepage": "http://sxaxsaca.herokuapp.com/",
  "repository": {
    "url": "https://github.com/heroku/heroku-buildpack-nodejs"
  },
  "dependencies": {
    "yuglify": "~0.1.4"
  },
  "engines": {
    "node": "0.10.x"
  }
}

可能需要提一下,Yuglify 不在我的 requirements.txt 文件里,只在我的 package.json 里。

1 个回答

3

我遇到了同样的问题,最后我使用了一个自定义的构建包,比如这个,并写了一个bash脚本来安装node和yuglify:https://github.com/heroku/heroku-buildpack-python

设置好构建包后,我创建了一些bash脚本来安装node和yuglify。这个构建包有一些钩子,可以调用这些编译后的脚本。这里有一个我跟着做的好例子:https://github.com/nigma/heroku-django-cookbook

这些脚本放在你项目根目录下的bin文件夹里。

在post_compile脚本中,我添加了一个安装yuglify的脚本。

post_compile脚本

if [ -f bin/install_nodejs ]; then
    echo "-----> Running install_nodejs"
    chmod +x bin/install_nodejs
    bin/install_nodejs


    if [ -f bin/install_yuglify ]; then
        echo "-----> Running install_yuglify"
        chmod +x bin/install_yuglify
        bin/install_yuglify
    fi

fi

install_yuglify脚本

  #!/usr/bin/env bash
    set -eo pipefail

    npm install -g yuglify

如果这样还是不行,你可以看看这个帖子:Yuglify压缩器找不到通过npm安装的包的二进制文件

撰写回答