在使用buildpack部署时,如何在Deis上自动运行Django迁移?

时间:2017-07-03 22:30:11

标签: django deis

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并且有一个有效的例子?

1 个答案:

答案 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