Ruby on Rails
रेल इंजन - मॉड्यूलर रेल
खोज…
परिचय
रेल इंजनों का त्वरित अवलोकन
इंजन छोटे रेल अनुप्रयोग हैं जिनका उपयोग उन्हें होस्ट करने वाले एप्लिकेशन में कार्यक्षमता जोड़ने के लिए किया जा सकता है। रूल्स एप्लिकेशन पर रूबी को परिभाषित करने वाला वर्ग 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 .
हाँ, अब हम कार्यों को नष्ट कर सकते हैं!