使用 buildpack 部署时,我如何 运行 在 Deis 上自动迁移 Django?
How do I run Django migrations automatically on Deis when using a buildpack deployments?
Deis 上的 post-compile 挂钩似乎与 Heroku 上的功能不同。
在 Heroku 上,我可以简单地添加一个 bin/post-compile 文件,其中包含:
#!/usr/bin/env bash
python manage.py migrate --noinput
在 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
有人 运行 Deis 上的 Django 使用 buildpacks 并且有这样的工作示例吗?
我最终找到了两个解决方案。
简单的答案就是提供 python 的完整路径。我通过将 bin/post-compile 文件添加到 deis/example-python-django
进行了测试
#!/usr/bin/env bash
/app/.heroku/python/bin/python manage.py migrate --noinput
但是,如果您需要访问任何配置变量,则此解决方案不起作用,如果您遵循 12 因素应用程序方法,则很可能是这种情况。
不幸的是,deis 没有运行 post-compile hooks 的方式与 Heroku 完全相同,所以我们需要先导出我们的环境变量。使用 sub-env function from the 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
Deis 上的 post-compile 挂钩似乎与 Heroku 上的功能不同。
在 Heroku 上,我可以简单地添加一个 bin/post-compile 文件,其中包含:
#!/usr/bin/env bash
python manage.py migrate --noinput
在 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
有人 运行 Deis 上的 Django 使用 buildpacks 并且有这样的工作示例吗?
我最终找到了两个解决方案。
简单的答案就是提供 python 的完整路径。我通过将 bin/post-compile 文件添加到 deis/example-python-django
进行了测试#!/usr/bin/env bash
/app/.heroku/python/bin/python manage.py migrate --noinput
但是,如果您需要访问任何配置变量,则此解决方案不起作用,如果您遵循 12 因素应用程序方法,则很可能是这种情况。
不幸的是,deis 没有运行 post-compile hooks 的方式与 Heroku 完全相同,所以我们需要先导出我们的环境变量。使用 sub-env function from the 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