19

Sự khác nhau giữa gói Gem, plugin và Engine trong Ruby on Rails là gì?Gem Vs Plugin Vs Engine trong Ruby on Rails

Tôi nghĩ chúng tôi sử dụng plugin trước Rails3.2 và sau khi rails3.2 được phát hành, chúng tôi đang sử dụng gói gem làm plugin nhưng làm cách nào chúng tôi có thể sử dụng công cụ trong ROR?

Trả lời

9

trả lời trích dẫn từ Difference between plugins and Ruby gems?

Gem

  • Gem là một ứng dụng ruby ​​đóng gói bằng cách sử dụng hệ thống đóng gói được định nghĩa bởi RubyGems.
  • Rails chính nó là một Gem.

    Rails đá quý được cài đặt trong JRuby-1.0 \ lib \ ruby ​​\ đá quý \ 1.8 \ đá quý \ ray-1.2.3 như:

    DIR bin
    DIR BUILTIN
    68.465 CHANGELOG
    DIR configs
    DIR văn
    DIR doc
    DIR môi trường
    307 fresh_rakefile
    DIR người giúp đỡ
    DIR html
    DIR lib
    1.072 MIT-PHÉP
    11.969 Rakefile
    8001 README
    Thư mục lib chứa tất cả các mã nguồn đá quý.

  • Chúng ta có thể cài đặt, nâng cấp và truy vấn viên ngọc version.If ai sử dụng một công cụ như GemInstaller của tôi, người ta có thể dễ dàng tự động hóa quá trình cài đặt và tải RubyGems với một tập tin cấu hình đơn giản duy nhất.

  • Đá quý được cài đặt cho thông dịch viên Ruby có thể được người phiên dịch sử dụng trên toàn hệ thống.
  • Đá quý có thể được xuất bản dưới dạng plugin.
  • Cũng có thể được bán trong nhà cung cấp/đá quý.

Plugin

  • Plugin là một phần mở rộng của Rails khung.
  • Không thể nâng cấp bằng cách sử dụng lệnh. Để nâng cấp, bạn phải gỡ cài đặt và sau đó cài đặt phiên bản nâng cấp.
  • Phải được nối vào ứng dụng đường ray. (Phải có init.rb)
  • Có một tập tin install.rb.
  • Không thể xuất bản plugin dưới dạng Đá quý.
  • Chỉ có thể được sử dụng rộng rãi.

Goldspike plugin được cài đặt trong nhà cung cấp \ plugins \ thư mục ray tích hợp các ứng dụng như:
7089 build.xml
1.141 license.txt
DIR plugins
6675 pom.xml
1,447 README
DIR mẫu
plugins/goldspike directory bao gồm
24 init.rb
25 install.rb
DIR lib
549 Rakefile
536 README
DIR nhiệm vụ
DIR kiểm tra
Thư mục lib chứa tất cả các mã nguồn plugin.

Gem vs Plugins

  • Rails có một cách để tải plug-in từ các nhà cung cấp/plugins/thư mục. Điều này rất có thể sẽ không được chấp nhận vì Rails đã thêm hỗ trợ cho việc đóng gói các đá quý với dự án trong thư mục vendor/gems /. Các phiên bản đá quý của rspec là các phiên bản dành cho sử dụng hàng ngày. Người ta nên đi với những người trừ khi bạn đang hỗ trợ một ứng dụng Rails trong gia đình 1.2.x hoặc trước đó.
  • Thường thì việc đăng ký và kiểm tra kho lưu trữ bằng cách sử dụng Gems trở nên nhanh hơn khi bạn không bao gồm thư viện trong ứng dụng thực tế của mình. Thường có ít sự cố hơn khi sử dụng Plugin liên quan đến sự không tương thích phát sinh liên quan đến các phiên bản phần mềm trong nhóm được phân phối.
  • Quy tắc chung của ngón tay cái là biến chức năng của Rails thành một plugin trong khi tạo các thư viện Ruby tổng quát hơn thành đá quý.

Một Engine trong đường ray ngữ là một thực sự là một subapplication của một ứng dụng web. Ví dụ, một cái gì đó giống như một blog, một diễn đàn, hoặc xác thực đơn giản: đây không phải là các ứng dụng toàn diện, nhưng các trang/khung nhìn/bộ điều khiển/mô hình có thể được thêm vào bất kỳ ứng dụng đường ray nào.

Trong đường ray2, việc này sẽ được thực hiện bằng cách sử dụng plugin. Bây giờ kể từ khi rails3 một động cơ có thể được đóng gói trong một gem.

  • Đá quý: là thư viện chung, có thể dễ dàng cài đặt, được quản lý phiên bản, có phụ thuộc và như vậy.
  • Động cơ: là ứng dụng con của ứng dụng Rails và vì Rails 3 được phân phối dưới dạng đá quý (tuyệt vời!).

Vì vậy, khi bạn sẽ sử dụng một hay khác:

  • tạo một viên ngọc nếu bạn muốn chia sẻ ruby-chức năng
  • tạo ra một động cơ (và gói nó trong một viên ngọc) nếu bạn có các phần của ứng dụng đường ray của bạn có thể được sử dụng thường xuyên hơn.

Here is an archived tutorial for creating an engine..

14

Plugins như bạn biết chúng từ Rails 2 (ví dụ: plugins trong thư mục vendor/plugins) đã bị phản đối cho Rails 3.2; hỗ trợ cho nó đã được gỡ bỏ hoàn toàn trong Rails 4. Bây giờ, có một khái niệm về một "gemified plugin" nơi các plugin về cơ bản được xây dựng như đá quý, và có thể được chia sẻ trên các ứng dụng Rails khác nhau.

Nhưng để trả lời câu hỏi của bạn về đá quý và plugin, hãy xem Stackoverflow answer này. Dài câu chuyện ngắn, plugins từ vũ trụ Rails 2 là một phần mở rộng của ứng dụng đường ray, trong khi đá quý là một ứng dụng ruby ​​được đóng gói.

Đối với động cơ Rails, tôi đã tìm thấy điều này là a pretty easy and intuitive definition của một động cơ Rails:

Rails Engines cơ bản là một ứng dụng toàn Rails sống trong container của nhau. Nói cách khác, như các tài liệu lưu ý: bản thân ứng dụng về cơ bản chỉ là một công cụ ở cấp cơ sở. Trong những năm qua, chúng tôi đã thấy động cơ sen như một phần của đá quý như devise hoặc rails_admin. Những ví dụ này cho thấy sức mạnh của động cơ bằng cách cung cấp một bộ lớn các chức năng tương đối khép kín "gắn kết" vào một ứng dụng.

Và vì cả động cơ và trình cắm đều là loại ứng dụng ruby, tất cả chúng có thể được đóng gói và sử dụng như đá quý (thường).

8

Không có nhiều plugins từ Rails 4. Rails 4.0 release notes:

Rails :: Plugin đã biến mất. Thay vì thêm plugin vào nhà cung cấp/plugins sử dụng đá quý hoặc bundler với đường dẫn hoặc phụ thuộc vào git.

Động cơ có thể được chứa trong đá quý. Gem chỉ là một bí danh cho một 'thư viện'.


Cách tốt nhất để xem những gì khác biệt của họ là, đang tạo ra ba trong số họ và nhìn qua cấu trúc của chúng thư mục:

bundle gem a_gem, sử dụng cho các chức năng không đường ray cụ thể.

rails plugin new b_railtie, sử dụng cho tiện ích mở rộng đường ray không yêu cầu thiết lập giống như ứng dụng đầy đủ. nhưng, vì nó vẫn là một thiết lập đường ray cụ thể (bạn sẽ có ứng dụng giả Rails của bạn trong /test ví dụ), có thể bạn sẽ sử dụng railtie trong đó.railtie là một lớp kế thừa từ Rails::Railtie và cung cấp cho bạn DSL thoải mái để nối mã của bạn vào Rails. ví dụ, nếu bạn muốn một số hành động được thực hiện :before một số bước khởi tạo ứng dụng Rails, bạn có thể sử dụng initializer Railtie class_method. Paperclip

rails plugin new c_engine --full, sử dụng cho các phần mở rộng đường ray sẽ được chính thức ứng dụng bản thân, gắn vào ứng dụng của bạn. sẽ cung cấp cho bạn /app dir và Engine phân lớp bên cạnh thiết lập cơ bản không --full.

rails plugin new c_engine --mountable, giống như --full, nhưng sẽ tạo không gian tên, sẵn sàng để được gắn vào công cụ ứng dụng của bạn. Spree

Và đây là liên kết khá tốt: http://hawkins.io/2012/03/defining_plugins_gems_railties_and_engines.

0

Động cơ rất có liên quan đến các plugin. Động cơ có thể là plugin và plugin có thể là động cơ. Tất cả chúng có thể được tạo ra bằng cách sử dụng máy phát điện rails plugin với 2 tùy chọn khác nhau --full hoặc --mountable.

Tôi nghĩ sự khác biệt chính ở đây giữa Động cơ và Đá quý.

Gems chỉ là một chút mã cung cấp một tập hợp các chức năng cho bất cứ ai tích hợp nó trong mã của nó.

Nó chứa:

  • thư mục Gemspec
  • Lib

có thể được đóng gói và đẩy đến các máy chủ RubyGems

Engines thực sự đá quý. Tất cả các công cụ có thể là đá quý (nếu đóng gói) nhưng không phải tất cả đá quý đều là động cơ.

Có thể nói nó với một từ khác nhau, động cơ là một Ruby on Rails tính năng, có thể chứa các thực thể Rails cụ thể: mô hình, điều khiển, quan điểm, di cư.

Nó cần được tích hợp bên trong Rails ứng dụng và không thể tự chạy.

Rất tốt và nhanh chóng đọc Artricle

Các vấn đề liên quan