是否可以“卸载”(“不需要”)Ruby库?

问题描述 投票:13回答:4

我希望加载一些库,让它们做一些工作,然后执行require的相反操作,以避免以后出现兼容性错误。我不想转储到文件并重新启动外壳程序,因为创建的对象(例如data)可以被我的其他库很好地处理,只是在我寻找的早期库中不存在卸载。

任何人有任何建议或知道是否可行? A conversation from 2006并没有得出太多结论,只是“看起来Webrick设法做到了这一点”。

有问题的库是Google_drive and Nokogiri(如该链接所述,电子表格处理库Roo依赖于Google_drive进行在线电子表格读写)。>>

我希望加载一些库,让它们做一些工作,然后执行require的相反操作,以避免以后出现兼容性错误。我不想转储到文件并重新启动Shell,因为...

ruby nokogiri google-drive-api
4个回答
10
投票

[就像@Alex所说,您可以使用Kernel#fork创建一个新的ruby进程,在其中将Kernel#fork您的库。新的分叉进程将有权访问父进程中加载​​的数据:


4
投票

我不知道有什么方法可以卸载文件,但是您可以将选择的全局变量重置为nil并取消定义常量(足够接近):


3
投票

[不幸的是,Ruby的几个特性最终都希望完全“卸载”一个库。首先,“加载” Ruby库可以运行任意Ruby代码。其次,可以在Ruby中动态地重新定义现有的常量和方法。


0
投票
尽管通常怎么说,使用此过程可以取消/卸载软件包。

    假设所需文件以这种简单的内容存储为https://github.com/jonleighton/spring
© www.soinside.com 2019 - 2024. All rights reserved.