2009-05-30 70 views
0

我面臨的一個問題是,在登臺或生產環境中運行時,我的Rails應用程序設置爲緩存類。雖然load_paths只包含'app/models',但似乎初始化步驟遞歸地緩存'app/models'中的所有內容。排除Eager負載上的子目錄

# Eager load application classes 
    def load_application_classes 
    if configuration.cache_classes 
     configuration.eager_load_paths.each do |load_path| 
     matcher = /\A#{Regexp.escape(load_path)}(.*)\.rb\Z/ 
     Dir.glob("#{load_path}/**/*.rb").sort.each do |file| 
      require_dependency file.sub(matcher, '\1') 
     end 
     end 
    end 
    end 

在這裏的問題是,我們有一個包含有需要引用併發JRuby的環境中陳述文件的應用程序/模型「中的子目錄。由於Rails對此環境一無所知,因此我們的應用程序在加載時會中斷。

現在看來,這裏提出的解決方案......不幸的是,只有#1是理想的。

1)最簡單的解決方案是排除罪魁禍首子目錄,但還沒有找到任何如何完成此任務。

2)Monkey修改load_application_classes方法以跳過特定的子目錄。

3)將子目錄從'app/models'下移出。感覺有點駭人,並且需要很多代碼更改。

想法?

回答

1

作爲一種臨時措施,您可以使用選項2的版本並覆蓋load_application_classes的定義,將其替換爲空實現。這會迫使你明確地需要你需要的類,但它會讓你完全控制被加載的東西,並且是一個完全透明的解決方案。

這聽起來像你的應用程序已經足夠複雜,它超越了Rails框架。我知道這並不是直接回答你的問題,所以你可能會考慮尋找另一種像Merb這樣的Ruby框架。 Rails很棒,但遲早你會碰到框架的邊緣 - 聽起來就像你現在在哪裏。

去年我們改用了Merb,並沒有對它進行修復。

Chris