【问题标题】:Can Rails console reload modules under lib?Rails 控制台可以在 lib 下重新加载模块吗?
【发布时间】:2011-09-15 17:25:53
【问题描述】:

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

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

【问题讨论】:

  • 这个question 似乎可以解决您的问题

标签: ruby-on-rails console


【解决方案1】:

试试这个:

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

【讨论】:

  • 轰隆隆!正是我需要的。谢谢,NullRef!
  • 没问题!我也有同样的挫败感。感谢接受!把我撞到了 200。我还打算回来给你指点 Guard https://github.com/guard/guard 在文件更改时可以做一些很棒的事情。
  • 我听说过 Guard,它非常酷。我以后需要用它来重新加载javascript文件,所以谢谢你的提醒!
  • 如果很多文件发生了变化,是否有一种简单的方法可以重新加载所有内容?
  • 要重新加载 lib 中的所有 rb 文件:Dir["#{Rails.root}/lib/**.rb"].map{|f| load f} 您应该注意添加到 ActiveRecord::Base 的模块,例如,在初始化程序中不会重新附加。
【解决方案2】:

如果有人感兴趣,这是我在how to auto-reload require files in Rails 上的发现,无需重新启动服务器。

该解决方案现在以 Ruby gem require_reloader 的形式提供。

【讨论】:

    【解决方案3】:

    这是可以帮助您的 monkeypatch,将其粘贴到 rails 控制台(或者您可以将此代码放在 monkeypatch 文件中 - 尽管我不建议使用实用方法对对象进行monkeypatching):

    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!
    

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

    【讨论】:

      【解决方案4】:

      将以下内容添加到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
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-18
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        • 2011-11-27
        • 1970-01-01
        • 2011-01-08
        相关资源
        最近更新 更多