Deis上的后编译钩子似乎与Heroku的功能不同。
在Heroku上我可以简单地添加一个bin / post-compile文件,其中包含:
#!/usr/bin/env bash
python manage.py migrate --noinput
On Deis这给了我一个追溯
Traceback (most recent call last):
File "manage.py", line 8, in <module>
from django.core.management import execute_from_command_line
No module named django.core.management
是否有人在使用buildpacks在Deis上运行Django并且有一个有效的例子?
答案 0 :(得分:1)
我最终找到了两个解决方案。
简单的答案是提供python的完整路径。我通过向deis/example-python-django
添加bin / post-compile文件来测试这个#!/usr/bin/env bash
/app/.heroku/python/bin/python manage.py migrate --noinput
如果您需要访问任何配置变量,此解决方案不起作用,如果您遵循12 Factor应用程序方法,则很可能就是这种情况。
不幸的是,deis没有以与Heroku完全相同的方式运行后编译钩子,因此我们需要首先导出我们的环境变量。使用sub-env中的heroku-buildpack-python函数作为指导,我想出了这个......
#!/usr/bin/env bash
echo "-----> Running post-compile hook"
BUILD_DIR=/tmp/build
ENV_DIR=/tmp/environment
BLACKLIST='^(GIT_DIR|STACK|PYTHONHOME|LD_LIBRARY_PATH|LIBRARY_PATH|PATH)$'
# Python-specific variables.
export PYTHONHOME=$BUILD_DIR/.heroku/python
export PYTHONPATH=$BUILD_DIR/
if [ -d "$ENV_DIR" ]; then
for e in $(ls $ENV_DIR); do
echo "$e" | grep -E "$WHITELIST" | grep -qvE "$BLACKLIST" &&
export "$e=$(cat $ENV_DIR/$e)"
:
done
fi
$PYTHONHOME/bin/python manage.py migrate --noinput