我想为我正在撰写的网络应用构建一个插件系统。每次添加/删除/启用/禁用插件时,我都不想重新启动应用程序。此外,我还不知道插件的名称,甚至不知道插件的名称(我想让它变得更加可扩展)。
显而易见的方法是在每个请求上重新加载应用程序(如本问题,Sinatra常见问题解答和Sinatra-Contrib)。重新加载每个请求对于生产环境而言性能会很差,尤其是流行的应用程序。
我读过一篇关于内核#load的文章,它在多次调用时重新加载文件,而Kernel#autoload只在需要时加载代码。但是这两种方法都要求对模块/类的名称进行硬编码。
Jenkins CI和WordPress暗示他们可以做到这一点。 Jenkins说" 1000+社区贡献了Jenkins插件"和WordPress说" 48,492插件"。所以我想它一定是可能的,但也许只能用Java或PHP。
我正在使用Ruby 2.2,Rack 1.6.5和Sinatra 1.4.7。我正在Windows上开发,我计划部署到Linux。如果我想要的东西在Windows上是不可能的(令人讨厌的是:P)我会用Linux建立一个开发服务器。
谢谢!
编辑:我还需要能够卸载插件。我不知道任何卸载/不需要的方法