खोज…


परिचय

रेल इंजनों का त्वरित अवलोकन

इंजन छोटे रेल अनुप्रयोग हैं जिनका उपयोग उन्हें होस्ट करने वाले एप्लिकेशन में कार्यक्षमता जोड़ने के लिए किया जा सकता है। रूल्स एप्लिकेशन पर रूबी को परिभाषित करने वाला वर्ग Rails::Application जो वास्तव में Rails::Engine से अपने व्यवहार का एक बहुत कुछ विरासत में मिला है, एक इंजन को परिभाषित करने वाला वर्ग। हम कह सकते हैं कि एक नियमित रेल एप्लिकेशन अधिक सुविधाओं वाला एक इंजन है।

वाक्य - विन्यास

  • रेल प्लग इन नए my_module --mountable

एक मॉड्यूलर ऐप बनाएं


# शुरू करना

सबसे पहले, चलो रेल एप्लिकेशन पर एक नई रूबी उत्पन्न करते हैं:

rails new ModularTodo

अगला कदम एक इंजन उत्पन्न करना है!

cd ModularTodo && rails plugin new todo --mountable

हम इंजनों को संग्रहीत करने के लिए एक 'इंजन' फ़ोल्डर भी बनाएंगे (भले ही हमारे पास बस एक हो!)।

mkdir engines && mv todo ./engines

इंजन, रत्नों की तरह, एक रत्न फ़ाइल के साथ आते हैं। आइए चेतावनियों से बचने के लिए कुछ वास्तविक मूल्यों को रखें।

 #ModularTodo/engines/todo/todo.gemspec
$:.push File.expand_path("../lib", __FILE__)

#Maintain your gem's version:
require "todo/version"

#Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
  s.name        = "todo"
  s.version     = Todo::VERSION
  s.authors     = ["Thibault Denizet"]
  s.email       = ["[email protected]"]
  s.homepage    = "//samurails.com"
  s.summary     = "Todo Module"
  s.description = "Todo Module for Modular Rails article"
  s.license     = "MIT"

  #Moar stuff
  #...
end


अब हमें टोडो इंजन को पैरेंट एप्लिकेशन जेमफाइल से जोड़ना होगा।

#ModularTodo/Gemfile
#Other gems
gem 'todo', path: 'engines/todo'

चलो bundle install । आपको रत्नों की सूची में निम्नलिखित देखना चाहिए:

Using todo 0.0.1 from source at engines/todo

महान, हमारे टोडो इंजन को सही ढंग से लोड किया गया है! इससे पहले कि हम कोडिंग शुरू करें, हमारे पास एक आखिरी चीज है: टोडो इंजन को माउंट करना। हम कर सकते हैं कि मूल अनुप्रयोग में मार्गों में .rb फ़ाइल।

Rails.application.routes.draw do
  mount Todo::Engine => "/", as: 'todo'
end

हम इसे बढ़ा रहे हैं / लेकिन हम इसे /todo में भी सुलभ बना सकते हैं। चूंकि हमारे पास केवल एक मॉड्यूल है, / ठीक है।

अब आप अपने सर्वर को फायर कर सकते हैं और इसे अपने ब्राउज़र में देख सकते हैं। आपको डिफ़ॉल्ट रेल दृश्य देखना चाहिए क्योंकि हमने अभी तक किसी भी नियंत्रक / विचार को परिभाषित नहीं किया है। चलो अब ऐसा करते हैं!

टोडो सूची का निर्माण

हम टोडो मॉड्यूल के अंदर Task नाम के एक मॉडल को तैयार करने जा रहे हैं, लेकिन मूल एप्लिकेशन से डेटाबेस को सही ढंग से माइग्रेट करने के लिए, हमें engine.rb फ़ाइल में एक छोटा इनिशियलाइज़र जोड़ना होगा।

#ModularTodo/engines/todo/lib/todo/engine.rb
module Todo
  class Engine < ::Rails::Engine
    isolate_namespace Todo

    initializer :append_migrations do |app|
      unless app.root.to_s.match(root.to_s)
        config.paths["db/migrate"].expanded.each do |p|
          app.config.paths["db/migrate"] << p
        end
      end
    end

  end
end

यही है, अब जब हम मूल एप्लिकेशन से माइग्रेशन चलाते हैं, तो टोडो इंजन में माइग्रेशन भी लोड हो जाएगा।


Task मॉडल बनाते हैं। इंजन फ़ोल्डर से scaffold कमांड चलाने की जरूरत है।

cd engines/todo && rails g scaffold Task title:string content:text

मूल फ़ोल्डर से माइग्रेशन चलाएँ:

rake db:migrate

अब, हमें टोडो इंजन के अंदर रूट रूट को परिभाषित करने की आवश्यकता है:

#ModularTodo/engines/todo/config/routes.rb
Todo::Engine.routes.draw do
  resources :tasks
  root 'tasks#index'
end

आप इसके साथ खेल सकते हैं, कार्य बना सकते हैं, उन्हें हटा सकते हैं ... ओह प्रतीक्षा करें, हटाएं काम नहीं कर रहे हैं! क्यों?! खैर, ऐसा लगता है कि JQuery लोड नहीं हुआ है, तो चलो इसे इंजन के अंदर application.js फ़ाइल में जोड़ दें!

// ModularTodo/engines/todo/app/assets/javascripts/todo/application.js
//= require jquery
//= require jquery_ujs
//= require_tree .

हाँ, अब हम कार्यों को नष्ट कर सकते हैं!



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow