如何在rails应用程序中包含插件/引擎



这是我第一次与rails插件进行交互,我无法理解这是如何工作的。我要做一个rails插件/引擎。我想把这个插件包括在我的rails应用程序中(另一个项目(,我该怎么做?我发现了这个建议

在这个全新引擎目录的根目录中有一个plugin_name.gemspec文件。当您稍后将引擎包含到应用程序中时,您将使用Rails应用程序的Gemfile:中的这一行来完成此操作

gem 'plugin_name', path: 'engines/plugin_name'

我的问题是,我到底该怎么做?我的意思是,当我创建rails应用程序时,我在文件夹结构中找不到任何engines目录。此外,我必须将插件项目中的哪些目录放在engines/目录中
我通过创建了一个插件

rails plugin new plugin_name --mountable

它生成了以下文件/目录:

|-app/
|-bin/                
|-config/
|-demo_project.gemspec
|-Gemfile
|-Gemfile.lock
|-lib/
|-MIT-LICENSE
|-Rakefile
|-README.md
|-test
|-dummy
|-(contains a rails application)

现在,一旦我完成了这个插件,我该如何将其包含在另一个rails应用程序中?除了在gemfile中包含插件外,我还需要在engines/中放入哪些目录?

除此之外,我还想要一些关于以下指示的信息

此外,--mountable选项告诉生成器将发动机安装在位于test/dummy的虚拟测试应用程序内,方法是将以下内容添加到位于test/dummy/config/routes.rb的虚拟应用程序的路由文件中:

mount PluginName::Engine => "/plugin_name"

挂载点表示什么?一旦插件包含在rails应用程序中,它将扮演什么角色?

Rails引擎是一个独立的Rails应用程序,安装在主应用程序中。创建引擎的两个主要原因是应用程序部分的隔离(可能有意将应用程序拆分为多个部分(和代码重用(当您在多个应用程序中使用相同的引擎时(

从技术上讲,它是一个ruby gem,但引擎通常作为大型应用程序的一个独立部分启动(并运行(,而没有完全提取到自己的存储库、gem发布等中。例如,如果你的应用程序中有admin,你可以将其作为一个引擎:

# in gemfile:
gem 'admin', path: 'engines/admin'
# routes:
mount Admin::Engine => '/admin'
# engine's routes:
resources :foo # => because of being in an engine this will be /admin/foo

目录结构可以看起来像:

|-app/
|-bin/
|-...
|-config/
|-application.rb
|-routes.rb
|-engines/
|-admin_engine/
|-app/
|-controllers/admin/
|- foo_controller.rb
|-config/
|-routes.rb # <- this is engine's routes
|-lib/
|-admin/
|-engine.rb
|- admin.gemspec

最新更新