2010-12-01 13 views
9

मैं कैपिस्ट्रानो का उपयोग करके अपने रेल 3 ऐप को तैनात कर रहा हूं, और मैं गिट संस्करण (और दिनांक जानकारी) प्राप्त करना चाहता हूं और इसके साथ अपनी वेबसाइट के पाद लेख को अपडेट करना चाहता हूं।रेल 3 ऐप, जीआईटी संस्करण कैसे प्राप्त करें और वेबसाइट अपडेट करें?

मैं यह कैसे कर सकता हूं?

उत्तर

8

डेविड की दिशा के आधार पर, मैंने इसे "git_info.rb" प्रारंभकर्ता बनाकर हल किया। अपने रेल initializers निर्देशिका में इस फाइल जगह

git_info.rb की सामग्री हैं:

GIT_BRANCH = `git status | sed -n 1p`.split(" ").last 
GIT_COMMIT = `git log | sed -n 1p`.split(" ").last 

फिर अपने पाद लेख में, तो आप इस उत्पादन का उपयोग कर सकते (Haml वाक्य रचना):

#rev_info 
    = "branch: #{GIT_BRANCH} | commit: #{GIT_COMMIT}" 

आप पृष्ठभूमि रंग के समान #rev_info के फ़ॉन्ट रंग को सेट करना चाहते हैं, इसलिए पाठ केवल तभी दिखाई देता है जब आप इसे अपने कर्सर से हाइलाइट करते हैं।

मैंने अभी यह कोशिश की, और जब यह विकास मोड में काम करता है, ऐसा लगता है जैसे शाखा "तैनाती" पोस्ट कैपिस्ट्रानो तैनाती के साथ अधिक लिखित हो जाती है। कैपिस्ट्रानो को तैनात करने पर "तैनाती" नामक अपनी स्थानीय शाखा बनाना चाहिए?

+1

डिफ़ॉल्ट रूप से हम साइट से उस अतिरिक्त डेटा को रखने के लिए हमारे capistano deploy.rb में 'set: copy_exclude, ".git/*"' जोड़ते हैं। इसलिए उपरोक्त कार्यों में विकास के दौरान, उत्पादन के लिए कोई गिट रेपो नहीं है। हालांकि, capistrano (और heroku, आकस्मिक रूप से) एक रिव्यूशन फ़ाइल बनाते हैं जो तैनाती में जोड़ा जाता है ताकि जब आप मौजूद हों तो आप वहां से SHA टैग का उपयोग कर सकते हैं। – jwadsack

+1

इसके बजाय 'गिट वर्णन' का उपयोग क्यों न करें –

0

बहुत समय पहले मैं तोड़फोड़ के लिए ऐसा किया:
एक प्रारंभकर्ता में मैं डाल एक वैश्विक

SVN_REVISION = `svn info | ruby -ne 'puts $1 if $_ =~ /^Revision: ([0-9]*)/'` 

और आवेदन लेआउट में:

<div id='site_footer'> 
    ... 
    <% unless SVN_REVISION.blank? -%> 
    <p id='version'> 
    v<%= SVN_REVISION %> 
    </p> 
    <% end -%> 
</div> 

साथ Git आप कर सकते थे वैश्विक को कुछ इस तरह बदलें:

git log -1 | ruby -ne 'puts $1 if $_ =~ %r{^Date: (.+) \+\d+$}' 

अब इस बारे में सोच है, यह करने के लिए बेहतर हो सकता है:

  • Capistrano एक विन्यास फाइल (config/git_status.yml)
  • initializers विन्यास को पार्स करता है बनाता है और चर

सेट मुझे यकीन नहीं है, यह सिर्फ एक विचार है।

8
लोगों की है कि Capistrano का उपयोग नहीं करता करने के लिए

, एक खूबसूरत एक:

पर config/initializers/git_info.rb:

GIT_BRANCH = `git symbolic-ref HEAD 2>/dev/null | cut -d"/" -f 3` 
GIT_COMMIT = `git log --pretty=format:'%h' -n 1` 
GIT_COMMIT_TIMESTAMP = `git log --pretty=format:'%ct' -n 1` 

दूसरा एक खूबसूरत रूप में शा देता है (पूर्व: 4df21c0)।

तीसरा व्यक्ति यूनिक्स टाइमस्टैम्प लौटाता है, जिसे मैं बाद में समय/दिनांक समय का उपयोग कर प्रारूपित करता हूं।

2

अक्सर एक एक Git भंडार में तैनात नहीं है, लेकिन एक रिलीज जो किसी भी भंडार जानकारी शामिल नहीं है में:

Capistrano प्रत्येक सफल तैनाती है जो Git प्रतिबद्ध शा के दोहरान फ़ाइल संग्रहीत करता है।इस फ़ाइल को REVISION कहा जाता है और यह तैनाती निर्देशिका की जड़ में पाया जा सकता है। की तरह कुछ के साथ deploy_version.rb:

config में/अपने रेल app की initializers, एक फ़ाइल बनाने के

if File.exists?('REVISION') 
    APP_REVISION = `cat REVISION` 
else 
    APP_REVISION = 'unknown' 
end 

या यदि यह सुनिश्चित करें कि बाहर तैनाती की हमेशा एक Git भंडार एक की जगह ले सकता है

if File.exists?('REVISION') 
    APP_REVISION = `cat REVISION` 
else 
    APP_REVISION = `git describe --abbrev=6 --always --tags.` 
end 
संबंधित मुद्दे