web-dev-qa-db-ja.com

Rails libでコンソールをリロードできますか?

私はRailsプロジェクトのlibの下にある。私は 'Rails c'を実行し、コンソールでいくつかの実験を行う。コンソールはファイルをリロードしませんコンソールを終了して再起動する必要があります.

そのファイルをリロードするより良い方法はありますか?

62
Chip Castle

これを試して:

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

興味のある方のために、サーバーを再起動せずに Railsでファイルを自動再読み込みする方法 に関する私の調査結果を以下に示します。

ソリューションはRuby gem require_reloader として利用可能になりました。

2
Huiming Teo

次を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内のすべてのファイルをリロードできるようになりました

0
Abdo

これはあなたを助けることができるサルパッチです、これをRails consoleに貼り付けてください(またはこのコードを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!

任意のオブジェクトでソースコードを再ロードします。

0
Wouter Vegter