【问题标题】:Ruby - create gem: reload console with updated gem contentRuby - 创建 gem:使用更新的 gem 内容重新加载控制台
【发布时间】:2014-07-03 17:54:09
【问题描述】:

根据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​​ 解决方案。

谢谢!

【问题讨论】:

  • load 'whatever_file_that_was_changed.rb'

标签: ruby gem rakefile


【解决方案1】:

您可以使用$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

请注意,如果您正在编写本机扩展,这将失败,您必须排除它们,并且您需要一个编译步骤并在它们发生变化时退出/重新启动。

【讨论】:

  • 添加了一个变量来从my_gem.gemspec获取gem名称:@gemname = Dir["#{Dir.pwd}/*.gemspec"].first.split('/').last.sub('.gemspec', '')
猜你喜欢
  • 1970-01-01
  • 2011-10-14
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
  • 2011-05-20
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
相关资源
最近更新 更多