2014-12-12 9 views
6

से हेरोकू रिलीज नंबर/कोड संस्करण प्राप्त करें क्या चल रहे डायनो से प्रति स्लग/रिलीज़ प्रति अनूठी कुंजी प्राप्त करना संभव है? मैं पीछा कर रहा था इस article सेटअप RAILS_CACHE_ID के लिए, लेकिन पाया गया कि dynos अब कॉन्फ़िगर किया गया GIT साथ जहाज (जो इस त्रुटि का कारण बनता है) (तैनाती के बाद etags समाप्त हो रही के लिए):रनिंग Dyno

fatal: Not a git repository (or any parent up to mount point /app) 
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). 

मैं भी करने के लिए एक config/initializers में यह स्थापित करने पर विचार वर्तमान समय लेकिन जाहिर है कि कई डायनोस में काम नहीं करेगा। कोई विचार?

उत्तर

9

वहाँ एक नया क्या है (नवंबर 2015) लैब सुविधा जो सिर्फ तुम क्या "Dyno मेटाडेटा" https://devcenter.heroku.com/changelog-items/768

heroku labs:enable runtime-dyno-metadata -a <app name> 
फिर Heroku पर

की आवश्यकता है:

~ $ env 
HEROKU_APP_ID:     9daa2797-e49b-4624-932f-ec3f9688e3da 
HEROKU_APP_NAME:     example-app 
HEROKU_DYNO_ID:     1vac4117-c29f-4312-521e-ba4d8638c1ac 
HEROKU_RELEASE_VERSION:   v42 
HEROKU_SLUG_COMMIT:    2c3a0b24069af49b3de35b8e8c26765c1dba9ff0 
HEROKU_SLUG_DESCRIPTION:   Deploy 2c3a0b2 
+0

dyno-metadata को सक्षम करने के बाद, मैंने इस लाइन को 'config/application.rb'' में जोड़ा: 'ENV ['RAILS_CACHE_ID'] = ENV ['HEROKU_RELEASE_VERSION'] 'इसलिए जब ऐप बूट हो जाता है तो यह कैश आईडी को हेरोकू रिलीज़ पर सेट करता है संस्करण। इसका अर्थ यह भी है कि एनवी चर बदलते समय यह एक नई कैश आईडी का उपयोग करेगा, लेकिन यह एक बुरी चीज नहीं है। – Josh

0

एक समाधान एक हेटोकू कॉन्फ़िगरेशन मान सेट करने के लिए एक गिट प्री-पुश हुक का उपयोग करना है। चूंकि यह पुश और स्लग संकलन से पहले किया जाता है, इसलिए कॉन्फ़िगर चर आपके रेल ऐप में 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'] अब सबसे हाल ही में रिलीज आईडी सेट किया जाना चाहिए। आप रेल स्टार्ट प्रारंभकर्ता में भी यही रणनीति का उपयोग कर सकते हैं।

+0

धन्यवाद काम करता है इस तरह की लेकिन नहीं होगा समर्थन रोल-बैक/रोल-फॉरवर्ड –

+0

हाँ, यह एक बहुत बड़ी सीमा है जिस पर मैंने विचार नहीं किया था। एक .profile.d संस्करण –

+0

अद्यतन के लिए धन्यवाद के लिए अद्यतन उत्तर देखें। मुझे लगता है कि यहां केवल एकमात्र सीमा यह है कि अगर एपीआई कभी जवाब देने में असफल रहता है तो उसे दोबारा तर्क जोड़ना होगा। उम्मीद है कि हेरोोकू भविष्य में ऐसा करने का एक आसान तरीका जोड़ता है। –

संबंधित मुद्दे