如何在 rails 应用程序中包含 plugin/engine?
How to include a plugin/engine in a rails application?
这是我第一次与 rails 插件互动,我无法理解它是如何工作的。我要做一个railsplugin/engine。我想在我的 rails 应用程序(一个不同的项目)中包含这个插件,我该怎么做?我发现 this 这表明
At the root of this brand new engine's directory lives a plugin_name.gemspec file. When you include the engine into an application later on, you will do so with this line in the Rails application's Gemfile:
gem 'plugin_name', path: 'engines/plugin_name'
我的问题是我该怎么做?我的意思是当我创建一个 rails 应用程序时,我在文件夹结构中找不到任何 engines
目录。还有我必须将插件项目中的哪些目录放在 engines/
目录中?
我通过
创建了一个插件
rails plugin new plugin_name --mountable
它生成以下 files/directories:
|-app/
|-bin/
|-config/
|-demo_project.gemspec
|-Gemfile
|-Gemfile.lock
|-lib/
|-MIT-LICENSE
|-Rakefile
|-README.md
|-test
|-dummy
|-(contains a rails application)
现在我用完这个插件后,如何将它包含在另一个 rails 应用程序中? engines/
除了在 gemfile 中包含插件外,我还需要在什么目录中放置?
除此之外,我还想要一些有关以下内容的信息
Additionally, the --mountable
option tells the generator to mount the engine inside the dummy testing application located at test/dummy
by adding the following to the dummy application's routes file at 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
这是我第一次与 rails 插件互动,我无法理解它是如何工作的。我要做一个railsplugin/engine。我想在我的 rails 应用程序(一个不同的项目)中包含这个插件,我该怎么做?我发现 this 这表明
At the root of this brand new engine's directory lives a plugin_name.gemspec file. When you include the engine into an application later on, you will do so with this line in the Rails application's Gemfile:
gem 'plugin_name', path: 'engines/plugin_name'
我的问题是我该怎么做?我的意思是当我创建一个 rails 应用程序时,我在文件夹结构中找不到任何 engines
目录。还有我必须将插件项目中的哪些目录放在 engines/
目录中?
我通过
rails plugin new plugin_name --mountable
它生成以下 files/directories:
|-app/
|-bin/
|-config/
|-demo_project.gemspec
|-Gemfile
|-Gemfile.lock
|-lib/
|-MIT-LICENSE
|-Rakefile
|-README.md
|-test
|-dummy
|-(contains a rails application)
现在我用完这个插件后,如何将它包含在另一个 rails 应用程序中? engines/
除了在 gemfile 中包含插件外,我还需要在什么目录中放置?
除此之外,我还想要一些有关以下内容的信息
Additionally, the
--mountable
option tells the generator to mount the engine inside the dummy testing application located attest/dummy
by adding the following to the dummy application's routes file attest/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