2017-07-03 106 views
1

Deis上的後編譯鉤子似乎在Heroku上的功能不同。如何在使用buildpack部署時在Deis上自動運行Django遷移?

在Heroku我可以簡單地添加含斌/後編譯文件:

#!/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  

是否有人使用buildpacks上DEIS運行Django和有這是一個工作的例子?

回答

1

我終於找到了兩個解決方案。

簡單的答案是隻提供一個完整的Python路徑。我已經通過添加斌/編譯後的文件測試,這deis/example-python-django

#!/usr/bin/env bash 

/app/.heroku/python/bin/python manage.py migrate --noinput 

該解決方案然而,如果你需要訪問您的任何配置變量,這是最有可能的,如果你的情況下無法正常工作遵循12個因子應用程序方法。

不幸的是,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 
相關問題