【问题标题】:Loading dependencies at runtime with bundler使用 bundler 在运行时加载依赖项
【发布时间】:2012-03-06 16:46:29
【问题描述】:

我有一个包含许多可选组件的应用程序,它们都有自己的复杂依赖项。例如,某些部署可能想要使用 LDAP 功能并且需要加载与 ldap 相关的 gem。但很多人不会,那些不需要安装 ldap 相关的 gem。

如何根据用户(部署者)启用的组件,使用 Bundler 加载这些依赖项?

我不想强迫部署人员手动编辑他们的 Gemfile。必须可以通过应用程序的 UI 启用/禁用组件。

仅在 Gemfile 中包含所有可能的依赖项并不理想。一些很少使用的组件需要大量复杂的原生编译。另一种解决方案可能是让应用程序编辑自己的 Gemfile。但这有点尴尬,每次更改组件时都可能需要重新启动。

Bundler 中有没有办法在运行时动态加载 gem?如果没有,是否有提供类似于 Bundler 的沙盒但允许动态加载的替代方案?

【问题讨论】:

  • This Bundler feature request 可能是相关的。
  • 感谢安德鲁的链接。我认为如果该功能请求得到满足,我们将处于更好的状态(只是 --with 会更好),但我希望可以在我的应用程序中执行类似 'Bundle.gem "gemname"' 的调用代码。我有一种感觉,这在 Bundler 当前的架构中可能是不可能的,但我想知道是否还有其他类似的项目可以做这样的事情。

标签: ruby rubygems bundler


【解决方案1】:

您可以提供多个 Gemfile 并使用 bundle install --gemfile 来使用特定的 gemfile,并且只安装该部署所需的 Gem。

在您的应用程序中,您可以将 Bundle.setup 与先前安装的 Gemfile 的相应组一起使用,以加载相应的 Gem

当然,这不是一个简单易用的方法,但应该可以为您提供所需的功能。

Bundler Setup bundle install

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 2020-04-04
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多