我有一个带有许多可选组件的应用程序,它们都有自己的复杂依赖项。例如,某些部署可能希望使用LDAP功能,并且需要加载与ldap相关的gem。但许多人不会,而那些不应该安装与ldap相关的宝石。
我如何使用Bundler加载这些依赖项,具体取决于用户(部署者)已启用哪些组件?
我不想强制部署者手动编辑他们的Gemfiles。必须可以通过应用程序的UI启用/禁用组件。
在Gemfile中包含所有可能的依赖项并不理想。一些很少使用的组件需要大量复杂的本机编译。另一种解决方案可能是让应用程序编辑自己的Gemfile。但这有点尴尬,每次组件更改时都可能需要重启。
Bundler中有没有办法在运行时动态加载gems?如果没有,是否有替代方案可以提供类似Bundler的沙盒,但允许动态加载?
答案 0 :(得分:0)
您可以提供多个Gemfiles并使用bundle install --gemfile来使用特定的gemfile,并只安装该部署所需的Gems。
在您的应用程序中,您可以将Bundle.setup与先前安装的Gemfile的相应组一起使用,以加载适当的Gems
当然这不是一种简单易行的方法,但应该为您提供所需的功能。