Ruby - 使用更新的gem内容创建gem:reload console

时间:2014-05-15 10:28:07

标签: ruby gem rakefile

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

task :console do
  require 'irb'
  require 'irb/completion'
  require 'my_gem' # You know what to do.
  ARGV.clear
  IRB.start
end

它的效果非常好,只要每当对gem进行更改时,我都需要exit并重新运行rake console以更新代码。作为创建/调试工具真的不方便......

有没有办法编写一个自定义方法,可以作为Rails中令人敬畏的reload!方法?

bash脚本不能正常工作,因为第一个命令在Ruby控制台中,我宁愿拥有100%的ruby解决方案。

谢谢!

1 个答案:

答案 0 :(得分:10)

您可以使用$LOADED_FEATURES全局查找gem的组件并使用load命令重新加载它们(使用require将不起作用,因为它会跳过Ruby已经处理过了:

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

注意如果您正在编写本机扩展,这将失败,您将不得不排除它们,并且您将需要编译步骤并且如果它们发生更改则退出/重新启动。