जवाबों:
इसका मतलब है कि मणि स्थापित करें, लेकिन बुंडलर शुरू करने के लिए कॉल की आवश्यकता नहीं है। इसलिए आपको मैन्युअल रूप से कॉल करना होगा
require "whenever"
यदि आप पुस्तकालय का उपयोग करना चाहते हैं।
अगर तुम करना था
gem "whenever", require: "whereever"
तब बंडलर जब भी नाम का रत्न डाउनलोड करेगा, लेकिन कॉल करेगा
require "whereever"
यह अक्सर उपयोग किया जाता है यदि आवश्यकता के लिए पुस्तकालय का नाम मणि के नाम से अलग है।
:require => falseइन विशेष रत्नों और स्पष्ट रूप require "thegem"से रेक कार्य से। यह तब मुख्य ऐप प्रोसेस और स्टार्टअप टाइम आदि में मेमोरी सेव करेगा। ऐप परफॉर्मेंस, हालांकि, प्रभावित नहीं होना चाहिए, भले ही आपको हर प्रक्रिया में इन अतिरिक्त रत्नों की आवश्यकता हो।
require 'yaml', तुम अब YAMLस्मृति में एक वस्तु के रूप में मॉड्यूल है।
:require => falseऔर फिर आपके कोड में एक होगाrequire 'library_name_here'
आप उपयोग :require => falseकरते हैं जब आप चाहते हैं कि मणि स्थापित किया जाए लेकिन "आवश्यक" नहीं।
इसलिए आपके द्वारा दिए गए उदाहरण में:
gem 'whenever', :require => false
जब कोई बंडल चलाता है तो जब भी मणि के साथ स्थापित किया जाएगा gem install whenever। जब भी एक रेक कार्य चलाकर क्रोन जॉब्स बनाने के लिए उपयोग किया जाता है, लेकिन आमतौर पर रेल्स (या अन्य ढांचे के भीतर से यदि रैलिंग नहीं होती है) का उपयोग नहीं किया जाता है।
इसलिए आप ऐसी :require => falseकिसी भी चीज के लिए उपयोग कर सकते हैं , जिसे आपको कमांड लाइन से चलाने की जरूरत है, लेकिन अपने कोड के भीतर की जरूरत नहीं है।
require: falseBundler.requireउस विशिष्ट मणि की आवश्यकता न होने के बारे में बताता है : मणि की आवश्यकता स्पष्ट रूप से होनी चाहिए require 'gem'।
यह विकल्प प्रभावित नहीं करता है:
bundle install: मणि परवाह किए बिना स्थापित हो जाएगा
requireबंडलर द्वारा खोज पथ सेटअप।
जब आप दोनों में से कोई भी करते हैं, तो बुडलर उस रास्ते से चीजें जोड़ता है:
Bundle.setuprequire bundler/setupbundle execउदाहरण
Gemfile
source 'https://rubygems.org'
gem 'haml'
gem 'faker', require: false
main.rb
# Fail because we haven't done Bundler.require yet.
# bundle exec does not automatically require anything for us,
# it only puts them in the require path.
begin Haml; rescue NameError; else raise; end
begin Faker; rescue NameError; else raise; end
# The Bundler object is automatically required on `bundle exec`.
Bundler.require
Haml
# Not required because of the require: false on the Gemfile.
# THIS is what `require: false` does.
begin Faker; rescue NameError; else raise; end
# Faker is in the path because Bundle.setup is done automatically
# when we use `bundle exec`. This is not affected by `require: false`.
require 'faker'
Faker
फिर निम्नलिखित अपवाद नहीं उठाएंगे:
bundle install --path=.bundle
bundle exec ruby main.rb
आप के साथ खेलने के लिए GitHub पर ।
रेल का उपयोग
जैसा कि इनिशियलाइज़ेशन ट्यूटोरियल में बताया गया है , डिफॉल्ट रेल्स टेम्प्लेट स्टार्टअप पर चलता है:
config/boot.rbconfig/application.rbconfig/boot.rb शामिल हैं:
ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE'])
जो require 'bundler/setup'आवश्यकता पथ को निर्धारित करता है ।
config/application.rb कर देता है:
Bundler.require(:default, Rails.env)
जिसे वास्तव में रत्नों की आवश्यकता होती है।
require 'fakerकरने से सही मणि संस्करण का उपयोग नहीं किया जा सकता है, खासकर यदि आप एक जीआईटी रेफरी के लिए जेफाइल पॉइंट हैं।
जब भी आप अपने जेम में एक रत्न निर्दिष्ट करते हैं Gemfileऔर चलाते हैं bundle install, तो बंडलर उस मणि के लिए निर्दिष्ट मणि और लोड कोड स्थापित करेगा, require 'whenever'इस तरह से बंडलर आपके रेल एप्लिकेशन में आपके सभी रत्नों के लिए कोड लोड करेगा, और आप किसी भी तरीके से कॉल कर सकते हैं किसी भी दर्द के बिना किसी भी मणि की तरह, आप ज्यादातर समय करते हैं।
लेकिन रत्न whenever, faker or capistrano कुछ ऐसा है, जिसकी आपको अपने ऐप कोड में ज़रूरत नहीं है, जब भी आपको अपनी schedule.rb फ़ाइल में कोड की आवश्यकता होती है, deploy.rb तैनाती नुस्खा को अनुकूलित करने के लिए फ़ाइल में क्रोन और कैप्रिस्ट्रानो कोड को प्रबंधित करने के लिए, ताकि आपको अपने ऐप कोड में इन रत्नों के लिए कोड लोड करने की आवश्यकता न हो और आप जहाँ भी हों इन रत्नों से किसी भी विधि को कॉल करना चाहते हैं, जिसे आप मैन्युअल रूप से डालकर अपने आप से थोड़े रत्न की आवश्यकता कर सकते हैं require "whenever" । तो आप :require => falseइन रत्न के लिए अपने Gemfile में डालते हैं, इस तरह से बंडल उस मणि को स्थापित करेगा लेकिन उस मणि के लिए कोड लोड नहीं करेगा, आप इसे तब भी कर सकते हैं जब आप अपने मामले में 'जब भी' की आवश्यकता हो, जैसे चाहे डाल सकते हैं।
अपने Gemfile में रत्नों की आवश्यकता के लिए, आपको कॉल करना होगा Bundler.require।
आप बंडल को मणि की आवश्यकता से रोक सकते हैं require: false, लेकिन यह अभी भी मणि को स्थापित और बनाए रखेगा। अधिक विस्तृत विवरण के लिए इसे देखें ।
Bundler.requireजो डिफ़ॉल्ट रूप से समझते हैं। केवल सिरो और नीशा के उत्तर सही हैं।