डीस पर पोस्ट-कंपाइल हुक हेरोोकू की तुलना में अलग-अलग काम करता है।
हेरोकू पर मैं बस एक बिन / पोस्ट-संकलन फ़ाइल जोड़ सकता हूं जिसमें निम्न शामिल हैं:
#!/usr/bin/env bash
python manage.py migrate --noinput
डीआईएस पर यह मुझे एक ट्रेसबैक देता है
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
क्या कोई भी बिल्डपैक्स का उपयोग कर डीज पर डीजेगो चला रहा है और इसका एक उदाहरण है?
उत्तर:
उत्तर № 1 के लिए 1मुझे अंत में दो समाधान मिल गए हैं।
सरल जवाब सिर्फ पायथन के लिए एक पूरा रास्ता प्रदान करना है। मैंने एक बिन / पोस्ट-संकलन फ़ाइल को जोड़कर इसका परीक्षण किया है Deis / उदाहरण-अजगर-Django
#!/usr/bin/env bash
/app/.heroku/python/bin/python manage.py migrate --noinput
यह समाधान तब भी काम नहीं करता है जब आपको अपने किसी भी कॉन्फ़िगरेशन चर के उपयोग की आवश्यकता होती है, जो कि यदि आप 12 फैक्टर ऐप पद्धति का पालन कर रहे हैं तो सबसे अधिक संभावना है।
दुर्भाग्य से डीआईएस पोस्ट-कंपाइल हुक को उसी तरह से नहीं चलाता है जैसे ही हेरोोकू करता है इसलिए हमें पहले हमारे पर्यावरण चर निर्यात करने की आवश्यकता होती है। उप env समारोह से Heroku-buildpack-अजगर एक गाइड के रूप में मैं इसके साथ आया ...
#!/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