Ruby-creategem:用更新的gem内容重新加载控制台

Ruby-creategem:用更新的gem内容重新加载控制台,ruby,gem,rakefile,Ruby,Gem,Rakefile,根据这一点,我们可以通过将这些行添加到rakefile来测试gem代码: task :console do require 'irb' require 'irb/completion' require 'my_gem' # You know what to do. ARGV.clear IRB.start end 它工作得非常好,除了每当对gem进行更改时,我都需要退出并重新运行rake控制台以更新代码。作为一个创建/调试工具,它确实不方便 有没有一种方法可以编写一个定制的

根据这一点,我们可以通过将这些行添加到rakefile来测试gem代码:

task :console do
  require 'irb'
  require 'irb/completion'
  require 'my_gem' # You know what to do.
  ARGV.clear
  IRB.start
end
它工作得非常好,除了每当对gem进行更改时,我都需要退出并重新运行rake控制台以更新代码。作为一个创建/调试工具,它确实不方便

有没有一种方法可以编写一个定制的方法来充当可怕的
reloadRails中的方法

bash脚本不起作用,因为第一个命令在Ruby控制台中,我希望有一个100%的Ruby解决方案


谢谢

您可以使用
$LOADED\u功能
global来查找gem的组件,并使用
load
命令重新加载它们(使用
require
将不起作用,因为它会跳过Ruby已经处理过的项目):


请注意,如果您正在编写本机扩展,则此操作将失败,您必须将它们排除在外,并且如果它们发生更改,您将需要一个编译步骤并退出/重新启动。

load'which_file_which_changed.rb'
添加了一个变量以从
my_gem.gempec
@gemname=Dir[“{Dir.pwd}/*.gempec]获取gem名称。first.split('/').last.sub('.gempec','')
task :console do
  require 'irb'
  require 'irb/completion'
  require 'my_gem' # You know what to do.

  def reload!
    # Change 'my_gem' here too:
    files = $LOADED_FEATURES.select { |feat| feat =~ /\/my_gem\// }
    files.each { |file| load file }
  end

  ARGV.clear
  IRB.start
end