कैसे बताएं कि एक रत्न ऐप के किस संस्करण का उपयोग कर रहा है


116

मैं एक रेल एप्लिकेशन की जांच कर रहा हूं - ठेस सर्वर में एक विशिष्ट मणि के दो संस्करण स्थापित हैं, मैं कैसे बता सकता हूं कि कौन सा संस्करण किस एप्लिकेशन का उपयोग कर रहा है?


क्या आप पूछ रहे हैं कि कौन सा संस्करण रेल का है, या किसी अन्य रत्न का कौन सा संस्करण है?
बीजे क्लार्क

1
किसी विशेष रत्न का कौन सा संस्करण।
स्टीव ब्रेवर

मेरे पास विक्रेताओं / रत्नों के नीचे एक मणि जमी हुई है, और फिर मणि के नए संस्करण को डिफ़ॉल्ट रत्नों के स्थान पर स्थापित किया गया है। मैं रेल से कुछ देख रहा हूं जो कहता है कि "मैंने इस स्थान से इस मणि को लोड किया है"।
स्टीव ब्रेवर

जवाबों:


172

रेल 3 और रेल 4 में, का उपयोग करें bundle show

रेल 2 में, rake gemsक्या रत्न, निर्भरता, और संस्करण स्थापित हैं, जमे हुए हैं, आदि का प्रिंट लेंगे।


2
यह केवल तभी काम करेगा जब पर्यावरण में .rb फ़ाइल के रूप में मणि निर्दिष्ट किया गया हो। अगर डेवलपर को कहीं इसकी आवश्यकता है, तो रेक रत्न काम नहीं करेंगे।
जॉन हायलैंड

(या आपके RAILS_ENV के आधार पर एक कॉन्फ़िगर / वातावरण / * फ़ाइलों में से एक।)
जॉन हायलैंड

2
यदि आप सूची को फ़िल्टर करना चाहते हैं bundle show | grep gem_name, तो कम्पास के लिए उदाहरण:bundle show | grep compass
एडम वेट

तो इसका क्या मतलब है जब आप बंडल शो टाइप करते हैं और आपको "रेल 2.3.17) सहित संस्करणों के साथ रत्न का एक गुच्छा मिलता है और आप रेक रत्न टाइप करते हैं और आपको वह मिलता है जो एक किंवदंती जैसा दिखता है (I = स्थापित, आदि) लेकिन कोई रत्न / संस्करण? क्या मेरे पास संस्करण 2 हैं या नहीं? हो सकता है कि मेरे पास संस्करण 2 और एक अधिक उन्नत बंडल हो? क्या अच्छा / बुरा है? (हाँ, मुझे पता है कि रेल का इतना पुराना संस्करण होना बुरा है, मैं जानना चाहता हूँ कि क्या? इस तरह के बेमेल (यदि यह) रेल और बंडलर है तो यह विनाशकारी है।
ब्रेंडा जे। बटलर

39

यदि आप बंडल का उपयोग करते हैं, तो आप संस्करण प्राप्त कर सकते हैं

bundle show [gemname]

मैं इस सवाल पर आया क्योंकि मैं बंडलर में स्थानांतरित करने की कोशिश कर रहा हूं (शायद बहुत से लोग भी, क्योंकि
हरोकू

यह पदावनत है। bundle info [gemname]इसके बजाय उपयोग करें ।
collimarco

37

मुझे इस जानकारी के माध्यम से खोजने और छांटने में अपेक्षा से अधिक समय लगा इसलिए मैं इसे दूसरों के देखने के लिए एक स्थान पर पोस्ट करना चाहता था। मैं रेल 3 के लिए इसे थोड़ा स्पष्ट करना चाहता था:

  • स्क्रिप्ट / के साथ बदल दिया गया है rake about विवरण यहाँ हैं । यदि आप रेल 3 के लिए सभी कमांड लाइन परिवर्तनों की सूची में रुचि रखते हैं, तो उन्हें यहां पाया जा सकता है

  • rake gems रेल 3 में काम नहीं करता है। इसके बजाय आपको उपयोग करना चाहिए bundle show

एक उदाहरण के रूप में, आप अपने रत्नों के सभी संस्करणों को देखने के लिए फ़ाइल में सहेज सकते हैं:

gem list > all_gems.txt

और आप देख सकते हैं कि आपके रेल एप्लिकेशन किन संस्करणों के साथ उपयोग कर रहे हैं:

bundle show > project_gems.txt

विम जैसे संपादक का उपयोग करके आप आसानी से बदलाव देखने के लिए विमडिफ का उपयोग कर सकते हैं


6

इसका पता लगाने का एक और सीधा तरीका है, लेकिन अगर आप एक कंसोल को लोड करते हैं और एक विशिष्ट संस्करण की आवश्यकता होती है जैसे:

gem 'RedCloth', '3.0.4'

यह आपको बताएगा कि कौन सा संस्करण पहले से सक्रिय है:

=> Gem::LoadError: can't activate RedCloth (= 3.0.4, runtime) for [], already activated RedCloth-4.2.2

6

टर्मिनल में

  bundle show <gem-name>
  bundle show | grep <gem-name>

या

  gem list | grep <gem-name>

उदाहरण के लिए:

  bundle show rails
  bundle show | grep rails

  gem list | grep rails

5

इसमें एक सूची भी है Gemfile.lock, जो आपके ऐप की रूट डायरेक्टरी में स्थित है।

इस कारण से मैं अपने को छोड़ Gemfile.lockदेता हूं .gitignore। इसने मुझे एक से अधिक बार बचाया है जब मैं मणि संस्करण को निर्दिष्ट करना भूल गया GemFile, और एक मणि टूटने वाले परिवर्तनों के साथ अद्यतन हो गया।


4

प्रयोग करके देखें script/about। आपके पास config/environment.rbभी इसके बारे में जानकारी है।

अपने में config/environment.rbआप निर्दिष्ट कर सकते हैं कि किसी विशेष gemएप्लिकेशन के किस संस्करण का उपयोग करना चाहिए। हालाँकि, यदि gemआपके मशीन पर इंस्टॉल के कई संस्करण हैं और आप संस्करण को निर्दिष्ट नहीं करते हैं, तो एप्लिकेशन द्वारा उस रत्न के नवीनतम संस्करण का उपयोग किया जाएगा।


3
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)

2

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सिस्टम पर सभी रत्नों के सभी संस्करणों को देखने के लिए टाइप कर सकते हैं। डिफ़ॉल्ट रूप से, यह उपलब्ध नवीनतम का उपयोग करेगा।


क्या आपकी स्क्रिप्ट / रत्नों के बारे में आपको बताती है? मेरा सिर्फ मुझे बताता है कि मैं रूबी, रेल और पर्यावरण के किस संस्करण का उपयोग कर रहा हूं।
बीजे क्लार्क

सही, रेल (और रैक) दोनों रत्न हैं, और स्क्रिप्ट / इसके बारे में आपको बताएंगे कि उनमें से कौन से संस्करण चल रहे हैं, साथ ही कोर रेल सामान (ActiveSupport, आदि) लेकिन यह आपको किसी अन्य रत्न के बारे में नहीं बताएगा। क्षमा करें यदि वह स्पष्ट नहीं था।
जॉन हैलैंड ऑक्ट

1
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
cori

1

बंडल शो मणिनाम Ie के लिए आपको लिखना होगा

bundle show devise

और यह वर्तमान मणि संस्करण का प्रिंटआउट लेगा।


0

स्थानीय मणि के लिए यह प्रयास करें:

gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

यदि आप बंडल का उपयोग करते हैं:

bundle exec gem list gemname | grep -P '(^|\s)\Kgemname(?=\s|$)'

0

नए संस्करण में, प्रयोग किया जाता है bundle show gem_name

[DEPRECATED] use `bundle info gem_name` instead of `bundle show gem_name`

0

यदि आप बंडल का उपयोग करते हैं, तो आप संस्करण का उपयोग कर प्राप्त कर सकते हैं:

bundle info [gemname]

-8

जेमफाइल में, इसका उत्तर होना चाहिए:

gem 'rails', '4.0.0.rc1'

2
Gemfileहमेशा स्पष्ट रूप से एक संस्करण संख्या घोषित नहीं करेंगे।
टैस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.