Ruby on Rails 5.2 - Rails::Railtie

वर्ग रेल :: Railtie




ruby

वर्ग रेल :: Railtie

जनक:
Object
शामिल मॉड्यूल:
रेल :: Initializable

Rails::Railtie रेल्स फ्रेमवर्क का मूल है और रेल्स का विस्तार करने और आरंभीकरण प्रक्रिया को संशोधित करने के लिए कई हुक प्रदान करता है।

रेल का हर प्रमुख घटक (एक्शन मेलर, एक्शन कंट्रोलर, एक्टिव रिकॉर्ड, आदि) एक रेलटी को लागू करता है। उनमें से प्रत्येक अपने स्वयं के प्रारंभ के लिए जिम्मेदार है। इससे रेल खुद को किसी भी घटक हुक से अनुपस्थित कर देती है, जिससे किसी भी अन्य रेल डिफॉल्ट के स्थान पर अन्य घटकों का उपयोग किया जा सकता है।

रेल एक्सटेंशन को विकसित करने के लिए एक रेलटी को लागू करने की आवश्यकता नहीं होती है, लेकिन अगर आपको बूट के दौरान या बाद में रेल ढांचे के साथ बातचीत करने की आवश्यकता है, तो एक रेलटी की आवश्यकता है।

उदाहरण के लिए, निम्नलिखित में से किसी एक को विस्तार करने के लिए एक रेलटी की आवश्यकता होगी:

  • इनिशियलाइज़र बनाना

  • एक जनरेटर की स्थापना की तरह, आवेदन के लिए रेल ढांचे को कॉन्फ़िगर करना

  • config.* जोड़ना config.* पर्यावरण की कुंजी

  • ActiveSupport::Notifications साथ एक ग्राहक की स्थापना

  • रेक कार्य जोड़ना

एक Railtie बनाना

रेल का उपयोग करके रेल का विस्तार करने के लिए, रेल का एक उपवर्ग बनाएँ Rails::Railtie । इस श्रेणी को रेल बूट प्रक्रिया के दौरान लोड किया जाना चाहिए, और इसे पारंपरिक रूप से MyNamespace::Railtie कहा जाता है।

निम्नलिखित उदाहरण एक विस्तार प्रदर्शित करता है जिसे रेल के साथ या बिना उपयोग किया जा सकता है।

# lib/my_gem/railtie.rb
module MyGem
  class Railtie < Rails::Railtie
  end
end

# lib/my_gem.rb
require 'my_gem/railtie' if defined?(Rails)

initializers

अपने रेलटी से रेल बूट प्रक्रिया में एक इनिशियलाइज़ेशन स्टेप जोड़ने के लिए, initializer मैक्रो के साथ इनिशियलाइज़ेशन कोड को परिभाषित करें:

class MyRailtie < Rails::Railtie
  initializer "my_railtie.configure_rails_initialization" do
    # some initialization behavior
  end
end

यदि निर्दिष्ट किया गया है, तो ब्लॉक एप्लिकेशन ऑब्जेक्ट भी प्राप्त कर सकता है, यदि आपको मिडलवेयर जैसे कुछ एप्लिकेशन-विशिष्ट कॉन्फ़िगरेशन तक पहुंचने की आवश्यकता है:

class MyRailtie < Rails::Railtie
  initializer "my_railtie.configure_rails_initialization" do |app|
    app.middleware.use MyRailtie::Middleware
  end
end

अंत में, आप initializer विकल्प के रूप में भी :before और :after पास कर सकते हैं, यदि आप इसे प्रारंभिक प्रक्रिया में एक विशिष्ट चरण के साथ जोड़ना चाहते हैं।

Configuration

रेलयात्री एक विन्यास वस्तु तक पहुँच सकते हैं, जिसमें सभी रेलियों और अनुप्रयोग द्वारा साझा विन्यास समाहित है:

class MyRailtie < Rails::Railtie
  # Customize the ORM
  config.app_generators.orm :my_railtie_orm

  # Add a to_prepare block which is executed once in production
  # and before each request in development.
  config.to_prepare do
    MyRailtie.setup!
  end
end

लोड हो रहा है टास्क और Generators

यदि आपके रेलटी के पास रेक कार्य हैं, तो आप रेल को rake_tasks माध्यम से उन्हें लोड करने के लिए कह सकते हैं:

class MyRailtie < Rails::Railtie
  rake_tasks do
    load 'path/to/my_railtie.tasks'
  end
end

डिफ़ॉल्ट रूप से, रेल आपके लोड पथ से जनरेटर लोड करती है। हालाँकि, यदि आप अपने जनरेटर को किसी अलग स्थान पर रखना चाहते हैं, तो आप अपने रेलवे स्टेशन को निर्दिष्ट कर सकते हैं जो सामान्य जनरेटर देखने के दौरान उन्हें लोड करेगा:

class MyRailtie < Rails::Railtie
  generators do
    require 'path/to/my_railtie_generator'
  end
end

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

Application और Engine

एक इंजन पहले से निर्धारित कुछ इनिशियलाइज़र्स के साथ एक रेलटी से ज्यादा कुछ नहीं है। और चूंकि Rails::Application एक इंजन है, यहां वर्णित समान कॉन्फ़िगरेशन दोनों में उपयोग किया जा सकता है।

अधिक जानकारी के लिए उन विशिष्ट वर्गों के प्रलेखन को देखना सुनिश्चित करें।

स्थिरांक

ABSTRACT_RAILTIES

पब्लिक क्लास के तरीके

# File railties/lib/rails/railtie.rb, line 155
def abstract_railtie?
  ABSTRACT_RAILTIES.include?(name)
end
कॉन्फ़िगर (और ब्लॉक) दिखाएँ स्रोत
# File railties/lib/rails/railtie.rb, line 173
def configure(&block)
  instance.configure(&block)
end

आपको रेलटी को कॉन्फ़िगर करने की अनुमति देता है। यह वही तरीका है जो Railtie :: विन्यास में देखा जाता है, लेकिन अब इस मॉड्यूल को Railtie सभी उपवर्गों के लिए आवश्यक नहीं है, इसलिए हम यहाँ वर्ग विधि प्रदान करते हैं।

कंसोल (& blk) स्रोत दिखाएं
# File railties/lib/rails/railtie.rb, line 143
def console(&blk)
  register_block_for(:load_console, &blk)
end
जनरेटर (और blk) दिखाएँ स्रोत
# File railties/lib/rails/railtie.rb, line 151
def generators(&blk)
  register_block_for(:generators, &blk)
end
विरासत में मिला (आधार) दिखाएँ स्रोत
# File railties/lib/rails/railtie.rb, line 133
def inherited(base)
  unless base.abstract_railtie?
    subclasses << base
  end
end
# File railties/lib/rails/railtie.rb, line 166
def instance
  @instance ||= new
end

चूंकि Railtie को तत्काल नहीं किया जा सकता है, इसलिए कॉल का कोई भी तरीका केवल Railtie उपवर्गों पर कॉल करने का इरादा Railtie

railtie_name (नाम = nil) स्रोत दिखाएं
# File railties/lib/rails/railtie.rb, line 159
def railtie_name(name = nil)
  @railtie_name = name.to_s if name
  @railtie_name ||= generate_railtie_name(self.name)
end
# File railties/lib/rails/railtie.rb, line 139
def rake_tasks(&blk)
  register_block_for(:rake_tasks, &blk)
end
धावक (और blk) दिखाएँ स्रोत
# File railties/lib/rails/railtie.rb, line 147
def runner(&blk)
  register_block_for(:runner, &blk)
end
# File railties/lib/rails/railtie.rb, line 129
def subclasses
  @subclasses ||= []
end

सार्वजनिक प्रवृत्ति के तरीके

# File railties/lib/rails/railtie.rb, line 222
def config
  @config ||= Railtie::Configuration.new
end

इसका उपयोग रेलिंग पर config ऑब्जेक्ट बनाने के लिए किया जाता है।