एक समाधान एक हेटोकू कॉन्फ़िगरेशन मान सेट करने के लिए एक गिट प्री-पुश हुक का उपयोग करना है। चूंकि यह पुश और स्लग संकलन से पहले किया जाता है, इसलिए कॉन्फ़िगर चर आपके रेल ऐप में ENV var के रूप में उपलब्ध होगा।
.git/hooks/pre-push:
#!/bin/sh
remote="$1"
url="$2"
while read local_ref local_sha remote_ref remote_sha
do
if [[ $url =~ heroku ]] ; then
app=$(git remote show -n $remote | sed -n -E -e 's/[[:space:]]+(Push[[:space:]]+URL)(\/|:).+(:|\/)(.*)\.git$/\4/gp')
echo Setting RAILS_CACHE_ID to $local_sha on app $app
heroku config:set RAILS_CACHE_ID=$local_sha --app $app
fi
done
exit 0
पूर्व push.sample फ़ाइल पैरामीटर हुक के साथ कहा जाता है के बारे में कुछ प्रलेखन है। मैं कॉन्फ़िगरेशन मान को सेट करने के लिए कौन सा ऐप निर्धारित करने के लिए गिट रिमोट के वर्बोज आउटपुट का उपयोग कर रहा हूं। Sed के लिए '-E' विकल्प मैक ओएस एक्स के लिए है - यदि आप जीएनयू sed का उपयोग कर रहे हैं तो उसे '-r' के साथ बदलें।
एक और समाधान अद्वितीय रिलीज आईडी प्राप्त करने के लिए profile.d स्क्रिप्ट के माध्यम से heroku-api का उपयोग करना है। यह उदाहरण रेंज हेडर का उपयोग कर नवीनतम रिलीज आईडी प्राप्त करने के लिए कर्ल का उपयोग करता है। यह प्रतिबद्ध संदर्भ नहीं है लेकिन रोलबैक और कॉन्फ़िगरेशन परिवर्तन सहित प्रत्येक रिलीज के लिए यह अद्वितीय होगा। आप API_KEY और APP_NAME को उसकेोकू कॉन्फ़िगर चर के रूप में सेट करना चाहते हैं।
.profile.d/release.sh
# get release id and set as RAILS_CACHE_ID
# Heroku config variables that need to be set
# API_KEY: heroku api key (get from dashboard or `heroku auth:token`
# APP_NAME: set this to your app_name (this could be hardcoded in the profile.d script but
# would make it harder to manage apps with multiple environments
res=$(curl -s -H "Accept: application/vnd.heroku+json; version=3"\
-H "Authorization: Bearer $API_KEY"\
-H "Range: version ..; order=desc, max=1"\
-X GET https://api.heroku.com/apps/$APP_NAME/releases)
release_id=$(ruby -rjson -e "j = JSON.parse('$res'); puts j[0]['id']")
export RAILS_CACHE_ID=$release_id
रेल ऐप्लिकेशन में, ENV [ 'RAILS_CACHE_ID'] अब सबसे हाल ही में रिलीज आईडी सेट किया जाना चाहिए। आप रेल स्टार्ट प्रारंभकर्ता में भी यही रणनीति का उपयोग कर सकते हैं।
स्रोत
2014-12-22 18:48:54
dyno-metadata को सक्षम करने के बाद, मैंने इस लाइन को 'config/application.rb'' में जोड़ा: 'ENV ['RAILS_CACHE_ID'] = ENV ['HEROKU_RELEASE_VERSION'] 'इसलिए जब ऐप बूट हो जाता है तो यह कैश आईडी को हेरोकू रिलीज़ पर सेट करता है संस्करण। इसका अर्थ यह भी है कि एनवी चर बदलते समय यह एक नई कैश आईडी का उपयोग करेगा, लेकिन यह एक बुरी चीज नहीं है। – Josh