Heroku上Django,Yuglify和CollectStatic问题

1 投票
2 回答
974 浏览
提问于 2025-04-18 16:04

我在用Django-Pipeline来压缩我的JavaScript代码。当我把项目上传到Heroku并运行CollectStatic的时候,出现了一个错误。

pipeline.exceptions.CompressorError: /usr/bin/env: yuglify: No such file or directory

但是当我手动运行CollectStatic的时候,Yuglify就能正常工作。我找不到问题出在哪里。在这种情况下,我应该给你们展示什么代码呢?

2 个回答

0

我找到了一种比较简单的解决办法。Heroku给你提供了构建包,这其实就是你的应用程序要搭建的环境。默认情况下,你会有一个Python的构建包。这就是为什么系统能运行像python manage.py这样的命令。我的解决方案如下:

1) 把nodejs构建包安装为第一个构建包。
heroku buildpacks:add --index 1 heroku/nodejs

2) 在和requirements.txt同一个路径下添加package.json文件。 3) 在package.json里添加yuglify这个依赖。

另一种解决办法是改变你的压缩方式,使用一个用Python写的压缩工具。

PIPELINE['CSS_COMPRESSOR']  = 'pipeline.compressors.cssmin.CSSMinCompressor'
PIPELINE['JS_COMPRESSOR'] = 'pipeline.compressors.jsmin.JSMinCompressor'

你可以用这个命令安装:pip install cssmin jsmin。

我对jsmin和yuglify哪个更好没有明确的看法。

1

我解决这个问题的方法是在代码库中添加一个“yuglify”部分,具体可以查看这里: https://github.com/nigma/heroku-django-cookbook

这是我的代码:

bin/install_yuglify

#!/usr/bin/env bash
set -eo pipefail
npm install -g yuglify

然后在 bin/post_compile 文件中添加以下内容(大约在第23行左右...)

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

这样就可以了 :)

你可以在这里查看我的代码,作为参考: https://github.com/GK-12/rpi_csdt_community/tree/master/bin

祝你好运!

撰写回答