Can Rails控制台可以在lib下重装模块吗?

时间:2011-06-15 16:58:45

标签: ruby-on-rails console

我在lib下的Rails项目中有一个模块。我运行'rails c'并在控制台中进行一些实验。我对lib下的模块进行了更改,输入'reload!'从控制台,它不会重新加载文件。我必须退出控制台并重新启动,这真的很痛苦。

有没有更好的方法来重新加载该文件?

4 个答案:

答案 0 :(得分:152)

试试这个:

load "#{Rails.root}/lib/yourfile.rb"

答案 1 :(得分:2)

如果有人有兴趣,这是我在how to auto-reload require files in Rails的调查结果,而不重启服务器。

该解决方案现在可以作为Ruby gem require_reloader使用。

答案 2 :(得分:0)

这是可以帮助你的monkeypatch,将其粘贴到rails控制台中(或者你可以把这段代码放在monkeypatch文件中 - 虽然我不建议使用实用方法monkeypatching Object):

class Object
  def self.reload_myself!
    method = (self.instance_methods(false) + self.methods(false)).select{|method| method.to_s[0] =~ /[A-Za-z]/}.last
    if method
      if self.instance_methods(false).index method
        method = self.instance_method(method)
      elsif
        method =  self.method(method)
      end

      if (method.source_location)
        source_location = method.source_location[0]
        puts "reloading: #{source_location}"
        load "#{source_location}"
      else
        puts "could not reload #{self.name}"
      end
    end
  end
end

你可以致电

reload_myself!

在任何重新加载源代码的对象上。

答案 3 :(得分:0)

将以下内容添加到config/initializers/reload.rb

class Object
  def reload_lib!
    Dir["#{Rails.root}/lib/**/*.rb"].map { |f| [f, load(f) ] } #.all? { |a| a[1] } 
    # uncomment above if you don't want to see all the reloaded files
  end
end

您现在可以通过在控制台中输入lib重新加载reload_lib!中的所有文件