Ruby on Rails
레일즈 엔진 - 모듈러 레일즈
수색…
소개
Rails 엔진에 대한 간략한 개요
엔진은 호스팅하는 애플리케이션에 기능을 추가하는 데 사용할 수있는 소형 Rails 애플리케이션입니다. Ruby on Rails 애플리케이션을 정의하는 클래스는 실제로 엔진을 정의하는 클래스 인 Rails::Engine
에서 많은 동작을 상속받는 Rails::Application
입니다. 레일스 애플리케이션은 단순히 더 많은 기능을 갖춘 엔진이라고 말할 수 있습니다.
통사론
- 레일스 플러그인 new my_module --mountable
모듈 식 앱 만들기
# 시작하기
먼저 새로운 Ruby on Rails 애플리케이션을 생성 해 보겠습니다.
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
이제 부모 응용 프로그램 Gemfile에 Todo 엔진을 추가해야합니다.
#ModularTodo/Gemfile
#Other gems
gem 'todo', path: 'engines/todo'
bundle install
실행 해 봅시다. 보석 목록에 다음이 표시되어야합니다.
Using todo 0.0.1 from source at engines/todo
중대한, 우리 Todo 엔진은 바르게 적재되었다! 코딩을 시작하기 전에 할 일이 있습니다 : Todo 엔진을 마운트하십시오. 부모 앱의 routes.rb 파일에서이 작업을 수행 할 수 있습니다.
Rails.application.routes.draw do
mount Todo::Engine => "/", as: 'todo'
end
/
마운트하고 있지만 /todo
에서 액세스 할 수도 있습니다. 우리는 단 하나의 모듈을 가지고 있기 때문에, /
괜찮습니다.
이제 서버를 가동하여 브라우저에서 확인할 수 있습니다. 아직 컨트롤러 / 뷰를 정의하지 않았기 때문에 기본 레일스 뷰를 볼 수 있습니다. 이제하자!
Todo 목록 만들기
우리는 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
이제 부모 응용 프로그램에서 마이 그 레이션을 실행할 때 Todo 엔진의 마이 그 레이션도로드됩니다.
Task
모델을 만들어 보겠습니다. scaffold
명령은 엔진 폴더에서 실행해야합니다.
cd engines/todo && rails g scaffold Task title:string content:text
상위 폴더에서 마이그레이션을 실행합니다.
rake db:migrate
이제 Todo 엔진 내부에 루트 경로를 정의하면됩니다.
#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 .
예, 이제 작업을 망칠 수 있습니다!