2012-06-11 13 views
7

मेरे पास हेरोकू पर आयोजित एक विकास शाखा है और हमारे पास इस शाखा का उपयोग करने के लिए कुछ लोग हैं जो बग की तलाश में हैं, यह SHA-1 हैश को दिखाने के लिए अच्छा होगा यह नवीनतम हैरोकू पर तैनात है ताकि हम जान सकें कि कौन सी बग संबंधित हैं।हेरोकू कंसोल गिट परिनियोजन से नवीनतम शा हैश दिखाता है

लेकिन मुझे यह जानकारी खोजने के लिए कोई रास्ता नहीं मिल रहा है। Heroku रन कंसोल में ENV चर में कुछ भी नहीं। हालांकि "हेरोकू रिलीज" एसएचए -1 हैश के पहले कुछ चरित्र सहित तैनाती की जानकारी की एक सूची दिखाता है, जो मुझे यह सोचने के लिए प्रेरित करता है कि हेरोकू को इसे कुछ स्टोर करना होगा, लेकिन मुझे बस यह नहीं मिल रहा है। क्या कोई जानता है?

मुझे एहसास है कि मैंने वास्तव में इस सवाल को स्पष्ट रूप से नीचे नहीं डाला है जैसा कि मुझे करना चाहिए: मेरा मतलब है कि हेरोकू पर रेल के अंदर SHA-1 हैश ढूंढना था। जैसे मैं ऐसा कुछ कर सकता हूं:

<h1><%= ENV['REV']</h1> 

धन्यवाद!

+0

मैं पूछने के लिए क्यूं कर? आप कहते हैं, 'हमारे पास इस शाखा का उपयोग करने के लिए कुछ लोग हैं जो बग की तलाश में हैं' मैं ट्रोल करने की कोशिश नहीं कर रहा हूं लेकिन आश्चर्य है कि आप देव में बग क्यों नहीं लगाएंगे, इसे दूसरों को देखने के लिए अपलोड करें और फिर एक बार मर्ज करें " अनुमोदित "या उनके लिए जो भी कारण है उसके लिए उसके अनुयायी में एक विशिष्ट शाखा को देखने के लिए और अपनी स्वयं की देव मशीनों पर नहीं। – pjammer

+0

कोई समस्या नहीं, मुझे नहीं लगता कि यह ट्रोलिंग है - शायद मेरी विधि इष्टतम सोच से समर्थित नहीं है, लेकिन अगर वे केवल अपनी स्थानीय मशीन पर ऐप का परीक्षण करते हैं, तो मैं बस सो नहीं सकता Heroku पर बिल्कुल वही काम करते हैं। –

+0

लेकिन यह एक स्टेजिंग वातावरण सही है? कोड में आप कितने लोग चकित कर रहे हैं? मेरा मतलब है, अगर कोई बग है, तो मास्टर से एक लड़का शाखाएं, इसे ठीक करती हैं, स्टेजिंग अपडेट करती हैं। आप इसे स्वीकार करते हैं। फिर आप मास्टर में विलय करते हैं और उत्पादन के लिए दबाव डालते हैं। आपको कुछ नींद आती है। – pjammer

उत्तर

10

उपचार Heroku किसी भी अन्य दूरस्थ Git रेपो की तरह - आप git ls-remote उपयोग कर सकते हैं:

git ls-remote heroku

अद्यतन (heroku यहां दूरदराज के नाम किया जा रहा है):

के बाद से ओपी वास्तव में रूबी एनवी में एसएचए हासिल करने की तलाश में है, एक संभावित तरीका custom buildpack का उपयोग करना होगा।

प्रारंभ करने के लिए, Heroku's Ruby Buildpack पर जाएं और इसे फोर्क करें ताकि आप अपनी खुद की विविधताओं को बना सकें। अब अपने कांटा को क्लोन करें और lib/language_pack/ruby.rb पर एक नज़र डालें। एक नई विधि जोड़ें, जैसे कुछ:

def get_SHA 
    #get SHA 
    #save SHA to ENV, ala: ENV['SHA'] = retrieved_sha 
end 

एसएचए प्राप्त करने के बारे में आप कैसे जाते हैं आप पर निर्भर है। आप एक Git आदेश पर अमल कर सकता है और का उपयोग क्या वापस आ रहा है:

git log -1 --format="%H"

या आप @ avaynshtok की सलाह का उपयोग करें और releases विधि का उपयोग करने Heroku मणि इस्तेमाल कर सकते हैं।

फिर, एक बार आपके पास SHA होने के बाद, इसे एक ENV var के रूप में सेट करें।

इसके बाद, ruby.rb में compile विधि मिल जाए, और यह के अंत तक get_sha पद्धति जोड़ें:

def compile 
    Dir.chdir(build_path) 
    install_ruby 
    setup_language_pack_environment 
    allow_git do 
     install_language_pack_gems 
     build_bundler 
     create_database_yml 
     install_binaries 
     run_assets_precompile_rake_task 
     get_sha #your additional method 
    end 
end 

अपने परिवर्तनों को GitHub अप करने के लिए पुश, और अब कमांड लाइन पर जाएं। इसलिए

heroku config:add [email protected]:<your GitHub username>/heroku-buildpack-ruby.git

नोट आप की आवश्यकता होगी कि सुनिश्चित करें कि आप के साथ, ठीक है ... अपने GitHub उपयोगकर्ता नाम <your GitHub username> की जगह है बनाने के लिए, आप: आप अपने Heroku ऐप्लिकेशन में एक नई config वर जोड़ने की आवश्यकता होगी आपके फोर्क रेपो पर इशारा कर रहे हैं।

heroku labs:enable user_env_compile

अब आप पूरी तरह से तैयार किया जाना चाहिए:

अंत में, एक अंतिम आदेश है कि एक Heroku labs feature कि उपयोगकर्ता के लिए स्लग संकलक पहुँच वार्स की अनुमति देता है के लिए सक्षम बनाता निष्पादित। तो अब वास्तव में क्या होता है? खैर, जब आप हरोकू को दबाते हैं, तो हेरोकू में परिवर्तन प्राप्त होंगे, और फिर देखें कि आपके पास कस्टम बिल्डपैक यूआरएल सेट है। तो यह आपके कस्टम बिल्डपैक को गिटहब से लाएगा, और उसके बाद स्लग बनाने के लिए इसका उपयोग करेगा। इसका अर्थ यह है कि एक बार जब यह सभी डिफ़ॉल्ट संकलन आदेशों के माध्यम से चलता है, तो यह आपके get_sha विधि के साथ समाप्त हो जाएगा, जो उपयुक्त SHA में ENV var SHA सेट करना चाहिए। अब आप रूबी के भीतर से उस एनएनवी var तक पहुंच सकते हैं, जो आप करेंगे उसके साथ करने के लिए।

+0

मेरे अस्पष्ट प्रश्न के बारे में क्षमा करें। मुझे यह जानकारी रेल –

+0

आह के अंदर मिलती है, ठीक है, जो चीजों को थोड़ा सा बदलता है। मुझे नहीं लगता कि इसके लिए हेरोोकू कार्यक्षमता में कोई भी बनाया गया है, लेकिन यदि आप सीडर पर हैं तो आप रूबी/रेल बिल्डपैक को फोर्क कर सकते हैं और स्वयं को एक एनवी सेट कर सकते हैं। – redhotvengeance

+0

मैं देखता हूं। यह बहुत बुरा है, मैं वास्तव में कहीं उम्मीद कर रहा था कि वे एसएचए संग्रहीत करेंगे। मेरा मतलब है, इसे "हेरोकू रिलीज" कमांड से पुनर्प्राप्त किया गया है, जो कहता है कि उन्हें यह * कहीं मिला है ... –

3

आप जारी जानकारी Heroku मणि का उपयोग कर प्राप्त कर सकते हैं: वैकल्पिक रूप से https://github.com/heroku/heroku

c = Heroku::Client.new <LOGIN>, <PASSWORD> 
c.releases(<APPNAME>).last['commit'] 

, आप अपने API कुंजी का उपयोग करके प्रमाणित कर सकते हैं:

c = Heroku::Client.new '', <API_KEY> 

नकारात्मक पक्ष यह है कि आप एक संग्रहीत करना होगा है लॉगिन/पासवर्ड कॉम्बो (या एपीआई कुंजी) कहीं (या तो आपके ऐप या हेरोकू एनवी में)।

तुम भी हुक को तैनात का उपयोग इस जानकारी पाने के लिए कर सकते हैं: https://devcenter.heroku.com/articles/deploy-hooks

+0

दोनों हुक और क्लाइंट को आशाजनक लग रहा है, मैं बिल्डपैक के साथ जा रहा हूं क्योंकि यह पहले से सोचा गया था कि यह निर्माण करने के लिए बहुत कम कठोर लगता है, और ऐसा लगता है कि एनएनवी चर प्रत्येक बार जब कोई SHA को देखना चाहता है (जिसे मैं प्रत्येक पृष्ठ पर स्टैंप की तरह रखना चाहता हूं) तो हरोकू क्लाइंट को कॉल करने से बचाता है। हालांकि तैनाती हुक इसे कुछ डेटाबेस तालिका में संग्रहीत करके इसे खत्म कर देगा। तो अगर बिल्डपैक काम नहीं करता है, तो मुझे इसका सहारा लेना पड़ सकता है। धन्यवाद Avaynshtok –

1

मैं इसके लिए Heroku platform API gem का उपयोग कर समाप्त हो गया। यह एक बड़ा घना है, लेकिन memoized है, तो आप केवल तैनाती एक ही बार करना करने की आवश्यकता होगी, और (असुरक्षित) कस्टम buildpacks (बारीकियों) के साथ चारों ओर खिलवाड़ की बचत होती है और तैनात हुक:

def current_sha 
    @current_sha ||= begin 
    heroku = PlatformAPI.connect_oauth(ENV['HEROKU_TOKEN']) 
    slug_id = heroku.release.list(ENV['HEROKU_APP']).last["slug"]["id"] 
    heroku.slug.info(ENV['HEROKU_APP'], slug_id)["commit"] 
    end 
end 
+0

यह वास्तव में एक अच्छा सुझाव है। मैंने कभी-कभी हराकू के HTTP परिनियोजन हुक को कभी-कभी फ्लेकी पाया। –

+0

यह मुझे सही प्रतिबद्धता नहीं दे रहा है। यह एक छोटी शता देता है, लेकिन मुझे यकीन नहीं है कि यह क्या है, और यह बार-बार कॉल पर अपडेट नहीं होता है। रिलीज सूची के लिए परिभाषित "आखिरी" विधि कहां है? – justingordon

+0

समस्या यह है कि यह केवल तभी काम करता है यदि आपके पास 200 से कम गिट कम है! https://discussion.heroku.com/t/can-a-custom-buildpack-put-the-current-git-commit-sha-into-apps-env/932। 200 के बाद, आप हर बार एक ही रिलीज मिलता है! अंतिम रिलीज के लिए और अधिक प्रभावी ढंग से पूछने के लिए कुछ रास्ता होना चाहिए। – justingordon

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