Rails 引擎迁移、模式转储和依赖项。

Rails engine migrations, schema dump, and dependencies.

我正在学习创建 Rails Engines 的教程,我很好奇是否需要列出主机的所有依赖项(我正在创建一个名为 admin 的 Rails 引擎一个更大的 Rails 应用程序)在引擎的 gem 文件中(显然引擎将通过 gem 访问)。为什么我需要这样做?

还有为什么引擎需要所有主机的迁移?还是引擎只需要与我要移至引擎的文件相关的迁移?

引擎应该完全独立于它的主机。它在代码和数据中是隔离的,并且应该能够放入 any 主机并以相同的方式工作。这意味着引擎对其主机的内部工作没有任何特殊了解,主机也没有引擎内部的特殊知识。

如果您的引擎依赖于一个名为 Admin 的模型,那么它应该包含一个用于创建 admins table 的迁移模板以及与 [=100% 交互所需的代码=10=]秒。迁移模板将与其他迁移一起复制到主机的 db/migrations 文件夹和 运行 中。不要将迁移添加到引擎本身,因为它一旦进入主机就无法 运行ning 它们。请记住:引擎无法了解主机内部的任何信息,包括其数据库架构。

我强烈建议您创建并保持这种分离。它会在未来为您省去巨大的麻烦。

在引擎中,您需要单独包含引擎的所有依赖项和代码。不要添加主机所需的依赖项或代码,因为不允许引擎知道它们。

这比听起来要难,但是您可以遵循一些很好的引擎示例。查看 RailsAdmin and Devise 代码组织、数据管理和测试的高质量样本。

测试很重要。为了让您的引擎实际显示页面或进行交互,您可能需要包含 Rails 等依赖项。您可以这样做,但请确保将它们作为 开发依赖项 添加到您的 Gemfile 中。有关如何执行此操作的示例,请参阅上述项目。

我建议您在宿主项目之外构建引擎,因为它会迫使您编写不依赖于宿主应用程序的测试。如果你的引擎是 testable 并且它自己运行良好,那么当你将它放入你的主机时它也会运行得很好。