1
重裝有沒有辦法重裝紅寶石模型在運行?Rails的班生產模式
比如我有一個模型
class Model
def self.all_models
@@all_models ||= Model.all
end
end
記錄在這個模型中被改變很少,但他們做的,我不想重新加載整個應用程序,僅此一類。
重裝有沒有辦法重裝紅寶石模型在運行?Rails的班生產模式
比如我有一個模型
class Model
def self.all_models
@@all_models ||= Model.all
end
end
記錄在這個模型中被改變很少,但他們做的,我不想重新加載整個應用程序,僅此一類。
在開發服務器,這是沒有問題的。生產服務器是一個很大的服務器。
在現實中,它不是沒有重新啓動服務器是可行的。最好的辦法是在ApplicationController中添加一個before過濾器來更新每個工作線程中的類變量,但必須在每個請求中完成。您無法輕鬆關閉此行爲。
如果是資源密集型操作,您可以將數據庫中的比較值/文件的上次修改時間與運行時定義的常量進行比較密集的測試,以確定是否應該發生完全重新加載。但是,作爲每個請求的一部分,你仍然必須這樣做。
但是,據我所知修改路由一旦已加載的服務器是不可能的。修改其他網站範圍的變量可能需要更多的努力,比如從文件/數據庫中讀取數據並在之前的過濾器中更新。
有可能是另一種方式,但我還沒有嘗試過的。所以沒有保證。 如果您使用基於ruby的服務器,如雜種。從理論上講,您可以使用hijack更新控制線程中的模型/路線/變量,工作線程從中生成。
我發現這個http://zilkey.com/2008/7/5/rails-cache-memcached-development-mode-and-offline-cache-invalidation 但它只能用於Rails.cache ,而不是靜態變量 – balepc 2010-01-12 15:35:26