使用Rails,Sinatra,Padrino…当我做修改时,我习惯了我的代码被自动重新加载。
当我在普通的Ruby gem项目上工作时,我如何获得相同的行为,这些项目不是基于框架的web框架。
我只想启动一个pry控制台,并在中间能够测试源代码的最新修改。

最佳答案

您只需要在某个地方定义一个方法,清除内存中的旧内容,然后重新加载构成gem的所有文件:

def reload!
  Object.send(:remove_const, :ProjectNamespace)
  path = File.expand_path("../", __FILE__)
  Dir.glob("#{path}/**/*.rb") { |f| load f }
end

因为您使用的是Pry,所以如果您想将其排除在代码库之外,可以在项目的.pryrc中定义它。
您甚至可以在模块内部定义重新加载逻辑,只要它包含在重新加载的文件中,一切都将正常:
module ProjectNamespace
  module_function
  def reload!
    # Reload code
  end
end

ProjectNamespace.reload!

如果您需要一个更受管理的解决方案(例如定时重新加载),您应该查看一个类似Rubyworks' autoreload的库。

关于ruby - Ruby代码自动重装而无需Rails,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25630528/

10-11 22:47