Ruby on rails 开发具有依赖关系的多个Rails插件

Ruby on rails 开发具有依赖关系的多个Rails插件,ruby-on-rails,ruby,dependencies,bundler,ruby-on-rails-plugins,Ruby On Rails,Ruby,Dependencies,Bundler,Ruby On Rails Plugins,我开始在我正在开发的一个项目中构建一系列插件和引擎,我遇到了一个问题:如果我想让rake工作,就必须在主应用程序和插件/引擎的所有gem文件中列出依赖项的路径 Rake对于主应用程序来说工作得很好,因为它的Gemfile列出了我想要的插件/引擎的相对路径,但是当一个插件/引擎依赖于另一个插件/引擎并且没有列出所有的相对路径时,使用Rake rdoc我会得到如下错误(大概我在尝试运行测试/虚拟应用程序/etc时会遇到相同的错误): Bundler找不到gem“user”的兼容版本: 在文件中: a

我开始在我正在开发的一个项目中构建一系列插件和引擎,我遇到了一个问题:如果我想让rake工作,就必须在主应用程序和插件/引擎的所有gem文件中列出依赖项的路径

Rake对于主应用程序来说工作得很好,因为它的Gemfile列出了我想要的插件/引擎的相对路径,但是当一个插件/引擎依赖于另一个插件/引擎并且没有列出所有的相对路径时,使用
Rake rdoc
我会得到如下错误(大概我在尝试运行测试/虚拟应用程序/etc时会遇到相同的错误):

Bundler找不到gem“user”的兼容版本:
在文件中:
auth(>=0)ruby依赖于
用户(>=0)ruby
在任何源代码中都找不到gem'auth(>=0)ruby'所需的gem'user(>=0)ruby'。
我没有使用路径,而是尝试在插件/引擎中指定git存储库,如下所示:

#用户引擎
gem'user',git:'https://localhost/git/project/user.git'分支:'主'
然后使用
bundler config local.user/path/to/local/repo
命令将其指向本地存储库进行开发。这似乎工作得很好…直到我在本地repo中更改插件的版本,然后它在任何依赖的插件/引擎/应用程序中抛出此错误:

在任何源中都找不到user-0.0.1
运行“bundle install”安装丢失的gems。
虽然这并不是什么大问题——无论如何,版本号最终都会更改——但如果您在本地回购中的分支而不是主回购中,它也会抛出以下错误:

位于/path/to/Local/repo的用户的本地重写正在使用分支deleteme,但Gemfile指定了master 从Gemfile中省略branch选项会导致以下错误:

无法对位于/path/to/local/repo的用户使用本地覆盖,因为:Gemfile中未指定分支。请指定分支或使用“bundle config--delete”删除本地覆盖

那么,我是否只需要在开发过程中使用
,路径:“../local repo directory”
散播关于相互依赖的插件/引擎的所有GEM文件,或者是否有一种方法可以同时为Rails开发多个相互依赖的插件/引擎,而不是使用一个非常草率/不雅观的解决方案

我在其他方法上没有说明,所以如果有任何帮助,我将不胜感激。我希望我已经充分解释了这一点,但如果还有什么我可以澄清的,请告诉我


谢谢!

坚持在GEM文件中指定git存储库,并使用它来处理它们

解决方案可能出现的问题:

1.位于/path/to/Local/repo的用户的本地重写正在使用分支deleteme,但Gemfile指定了master
如果您的Gemfile指定分支“master”,那么本地覆盖应该有分支“master”已签出。这是因为本地覆盖的目标是,您可以在运行和测试应用程序时处理本地文件夹中的gem。在生产中,它将签出Gemfile和Gemfile.lock中指定的分支和修订,当然,它应该与您使用本地覆盖运行的完全相同


2.在任何源中都找不到user-0.0.1
运行“bundle install”安装丢失的gems。
运行bundle install时,它会在Gemfile.lock中为每个gem放置一个版本号。此文件会添加到git中,以便其他开发人员和您的生产服务器运行与您相同版本的gem。您的Gemfile.lock需要指定与本地覆盖gempec文件中返回的gem版本相同的gem。如果您增加在本地覆盖中输入您需要运行“bundle update gemname”的版本号在使用它的应用程序中,它会更新Gemfile.lock。请注意,bundler会缓存gempec文件中的所有内容,直到您增加版本。因此,如果您不增加gempec中的版本号,则无法在gempec中添加新的依赖项或更改依赖项版本

git bundle gem

如果在Gemfile中使用git存储库并进行本地覆盖,bundler将在Gemfile.lock中存储git修订哈希,如上所述。示例:

档案:

gem'example',git:'https://github.com/your_name/example.git'分支::主

Bundle config shell命令:

bundle config local.example/path/to/local/git/repository

Gemfile.lock(自动生成):

吉特
远程:https://github.com/your_name/example.git
修订:B9270E61AB89E1FF77FB8CFACB463E4D04388AD
分支机构:硕士

在本地覆盖存储库中提交后,您需要在主应用程序上运行bundle install,以便它重建Gemfile.lock以包含新的修订哈希并提交。我建议使用下面的gem,因为它为您自动执行此过程,并在其他情况下提供帮助。有关详细信息,请参阅gem页面

activesupport decorators gem

作为旁注,当您需要在gem之间扩展类时,可以使用由activesupport decorators gem优雅实现的decorator模式: