ruby-on-rails - 如何设置 gem 依赖项,而不必在使用它的 Gemfile 上声明它们?

标签 ruby-on-rails rubygems

我正在本地构建一个 gem,假设它的名称是“MyGem”。

现在假设 MyGem 依赖于其他已构建的 gem,例如“cancan”。

所以,我在 mygem.gemspec 中添加了以下行:

add_runtime_dependency("cancan")

问题是:如果我通过将 MyGem 添加到我的 gemfile 中来将其安装到新项目中,如下所示:

gem "mygem", :path => "path/to/my/local/gem"

那么这个新项目无法使用 cancan 方法,我必须在新项目 gemfile 上显式声明 cancan 才能使用它。

我也尝试使用 gemspec 方法,但也没有解决我的问题。 有什么想法吗?

更新

我只是想补充一点,当我只在新应用程序 gemfile 中声明 myGem 时,在运行 bundle install 后,所有依赖项都会安装。 也就是说,如果我运行gem list,则会显示“cancan”gem,但我仍然无法从应用程序级别访问它的方法。

感谢您的帮助。

最佳答案

好的,我已经解决了这个问题。我不确定这是否是最好的解决方案,但它确实有效。

让应用程序级开发人员在他的 gemfile 中显式添加依赖项没有任何意义。因此,当安装 gem 时,我只需要我的 my_engine.rb 中的所有 gem 依赖项。文件内部我的 gem 。

按照我的 my_engine.rb 中的示例我添加了以下行

require "cancan"

就是这样... 你可以做得更好:

autoload :CanCan, "cancan"

因此该模块仅在调用时才会加载。 甚至更好的是,您可以仅加载您正在使用的 cancan 中的文件(也许您不需要加载全部文件)。

您可以在 my_gem.rb 中添加该行文件或您的 engine.rb如果您使用引擎,请文件。

这对我有用,我希望这对某人有帮助。

关于ruby-on-rails - 如何设置 gem 依赖项,而不必在使用它的 Gemfile 上声明它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9504759/

相关文章:

ruby-on-rails - 如何在 Rails 3 中测试来自第三方 API 的响应

mysql - 如何使用 cloud9 在 ruby​​ on rails 中从 sql 文件导入 mysql 数据库?

ruby-on-rails - 如何在FreeBSD 9.1上搭建rails运行环境

ruby-on-rails - ... : wrong number of arguments (0 for 1+) 中的 gemspec 无效

ruby - 如何将 `--with-ruby-include` 之类的构建标志传递给 gem 安装?

ruby-on-rails - RAILS - 提交表单时添加消息

ruby-on-rails - ActiveRecord 尝试使用 rbenv 连接到错误的数据库

ruby-on-rails - 回形针和 S3 : Multiple thumbnail sizes not saving

ruby-on-rails - 我可以编辑使用 'gem install'或从我的gemfile安装的gem吗?

ruby - 如果已安装 gem,请不要重新安装