मैं एक रेल एप्लिकेशन की जांच कर रहा हूं - ठेस सर्वर में एक विशिष्ट मणि के दो संस्करण स्थापित हैं, मैं कैसे बता सकता हूं कि कौन सा संस्करण किस एप्लिकेशन का उपयोग कर रहा है?
मैं एक रेल एप्लिकेशन की जांच कर रहा हूं - ठेस सर्वर में एक विशिष्ट मणि के दो संस्करण स्थापित हैं, मैं कैसे बता सकता हूं कि कौन सा संस्करण किस एप्लिकेशन का उपयोग कर रहा है?
जवाबों:
रेल 3 और रेल 4 में, का उपयोग करें bundle show
रेल 2 में, rake gems
क्या रत्न, निर्भरता, और संस्करण स्थापित हैं, जमे हुए हैं, आदि का प्रिंट लेंगे।
bundle show | grep gem_name
, तो कम्पास के लिए उदाहरण:bundle show | grep compass
यदि आप बंडल का उपयोग करते हैं, तो आप संस्करण प्राप्त कर सकते हैं
bundle show [gemname]
bundle info [gemname]
इसके बजाय उपयोग करें ।
मुझे इस जानकारी के माध्यम से खोजने और छांटने में अपेक्षा से अधिक समय लगा इसलिए मैं इसे दूसरों के देखने के लिए एक स्थान पर पोस्ट करना चाहता था। मैं रेल 3 के लिए इसे थोड़ा स्पष्ट करना चाहता था:
स्क्रिप्ट / के साथ बदल दिया गया है rake about
विवरण यहाँ हैं । यदि आप रेल 3 के लिए सभी कमांड लाइन परिवर्तनों की सूची में रुचि रखते हैं, तो उन्हें यहां पाया जा सकता है ।
rake gems
रेल 3 में काम नहीं करता है। इसके बजाय आपको उपयोग करना चाहिए bundle show
एक उदाहरण के रूप में, आप अपने रत्नों के सभी संस्करणों को देखने के लिए फ़ाइल में सहेज सकते हैं:
gem list > all_gems.txt
और आप देख सकते हैं कि आपके रेल एप्लिकेशन किन संस्करणों के साथ उपयोग कर रहे हैं:
bundle show > project_gems.txt
विम जैसे संपादक का उपयोग करके आप आसानी से बदलाव देखने के लिए विमडिफ का उपयोग कर सकते हैं
इसका पता लगाने का एक और सीधा तरीका है, लेकिन अगर आप एक कंसोल को लोड करते हैं और एक विशिष्ट संस्करण की आवश्यकता होती है जैसे:
gem 'RedCloth', '3.0.4'
यह आपको बताएगा कि कौन सा संस्करण पहले से सक्रिय है:
=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2
प्रयोग करके देखें script/about
। आपके पास config/environment.rb
भी इसके बारे में जानकारी है।
अपने में config/environment.rb
आप निर्दिष्ट कर सकते हैं कि किसी विशेष gem
एप्लिकेशन के किस संस्करण का उपयोग करना चाहिए। हालाँकि, यदि gem
आपके मशीन पर इंस्टॉल के कई संस्करण हैं और आप संस्करण को निर्दिष्ट नहीं करते हैं, तो एप्लिकेशन द्वारा उस रत्न के नवीनतम संस्करण का उपयोग किया जाएगा।
gem list <gemname>
यह सभी मिलान वाले रत्नों को दिखाएगा जैसे कि यदि कोई ऐसा करता है
gem list rack
तब वें आउटपुट निम्नानुसार होगा
*** LOCAL GEMS ***
rack (1.6.4)
rack-mount (0.6.14)
rack-test (0.6.3, 0.6.2, 0.5.7)
script/about
आपको बताएगा कि आपके द्वारा उपयोग किए जा रहे कोर रेल और रैक रत्नों के कौन से संस्करण हैं, लेकिन कुछ और नहीं। आदर्श रूप में, यदि आप देखते हैं config/environment.rb
, तो ऐसा खंड होना चाहिए जो इस तरह दिखता है:
# Specify gems that this application depends on and have them installed with rake gems:install
# config.gem "bj"
# config.gem "hpricot", :version => '0.6', :source => "http://code.whytheluckystiff.net"
# config.gem "sqlite3-ruby", :lib => "sqlite3"
# config.gem "aws-s3", :lib => "aws/s3"
किसी भी भाग्य के साथ, एप्लिकेशन के लेखक ने वहां किसी भी आवश्यक रत्न और संस्करण को शामिल किया होगा। हालाँकि, इस फ़ाइल में संस्करण वैकल्पिक हैं, और अंततः किसी भी अनुभवहीन डेवलपर require 'rubygems'; require 'some_random_thing'
को किसी दिए गए फ़ाइल के शीर्ष पर केवल थप्पड़ मारने से नहीं रोकता है ।
यदि आप देखते हैं कि एक मणि की आवश्यकता है, लेकिन कोई संस्करण निर्दिष्ट नहीं है, तो आप gem list
सिस्टम पर सभी रत्नों के सभी संस्करणों को देखने के लिए टाइप कर सकते हैं। डिफ़ॉल्ट रूप से, यह उपलब्ध नवीनतम का उपयोग करेगा।
bundle exec gem which gem_name
शायद वही है जो आप उपयोग कर सकते हैं:
$› bundle exec gem which rails
/Users/xxxx/.rvm/gems/ruby-2.1.2@gemset/gems/railties-4.1.7/lib/rails.rb
gem which gem_name
बंडल शो मणिनाम Ie के लिए आपको लिखना होगा
bundle show devise
और यह वर्तमान मणि संस्करण का प्रिंटआउट लेगा।
स्थानीय मणि के लिए यह प्रयास करें:
gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
यदि आप बंडल का उपयोग करते हैं:
bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'
यदि आप बंडल का उपयोग करते हैं, तो आप संस्करण का उपयोग कर प्राप्त कर सकते हैं:
bundle info [gemname]