我在lib下的Rails項目中有一個模塊。我運行'rails c'並在控制檯中做一些實驗。我對lib下的模塊進行了更改,輸入'reload!'從控制檯,它不會重新加載文件。我必須退出控制檯並重新啓動,這真的很痛苦。可以在控制檯下的控制檯重新加載模塊?
有沒有更好的方法來重新加載該文件?
我在lib下的Rails項目中有一個模塊。我運行'rails c'並在控制檯中做一些實驗。我對lib下的模塊進行了更改,輸入'reload!'從控制檯,它不會重新加載文件。我必須退出控制檯並重新啓動,這真的很痛苦。可以在控制檯下的控制檯重新加載模塊?
有沒有更好的方法來重新加載該文件?
試試這個:
load "#{Rails.root}/lib/yourfile.rb"
Boom-shocka-locka!正是我需要的。謝謝,NullRef! – 2011-06-15 19:48:11
沒問題!我也有同樣的挫折感。感謝接受!將我撞到了200.我也會回來並指出你有'Guard' [https://github.com/guard/guard](https://github.com/guard/guard),它可以做一些很棒的當文件被改變時的東西。 – NullRef 2011-06-15 19:53:27
我聽說過Guard,它非常酷。我需要在未來使用它來重新加載JavaScript文件,所以感謝提醒! – 2011-06-16 16:13:07
如果有興趣的人,這裏的一對how to auto-reload require files in Rails我的調查結果而無需重新啓動服務器。
該解決方案現在可作爲Ruby寶石require_reloader提供。
這是一個可以幫助你,粘貼在軌控制檯猴補丁(或者你可以把這個代碼在猴補丁文件 - 雖然我不建議的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!
任何對象上重新加載其源代碼。
添加以下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
所有文件在控制檯
這個[問題](http://stackoverflow.com/questions/2129458打字
reload_lib!
/自動加載軌道模塊/ 2138935#2138935)似乎有你的問題的解決方案 – 2011-06-15 17:37:16