Heroku上Django,Yuglify和CollectStatic问题
我在用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
祝你好运!