2012-11-27 69 views
0

我有一個由Rails提供的REST API,它有一個路徑/api/blah/blah/images.json,它提供了有關圖像的信息,這是圖像模型的一個實例。在開發中,這工作正常;在我們創建的沙箱環境中,這會產生apache錯誤(路徑永遠不會與routes.rb匹配,並且rails日誌根本不記錄請求)。如何防止資產管道與我的/.../.../.../images URL衝突?

我們玩過並發現這個問題恰好出現在那些包含子字符串「/ images」,「/ javascripts」或「/ stylesheets」的URL中,所以我們懷疑rails assets pipeline會以某種方式攔截這些URL (然後在該路徑上找不到任何圖像,併發出錯誤)。

如何配置哪些URL被視爲資產並根據routes.rb傳遞給控制器​​?

回答

0

已解決。我們在我們的{}環境.INCLUDE的Apache的conf文件中以下行:

# Turn passenger off for directories w/ just static content and 
# allow auto indexing. 
<Location ~ /(stylesheets|javascripts|images|snapshots|fonts)> 
    PassengerEnabled off 
    FileETag None 
    # Options -Indexes 
</Location> 

這是關閉的乘客(因此防止滑軌從不斷得到請求)每當URL路徑匹配的正則表達式/\/(stylesheets|javascripts|images|snapshots|fonts)/。這是一個非常過分熱心的正則表達式 - 在我們的情況下,它應該只當路徑與這些名字中的一個開始匹配,所以我們把它改成

# Turn passenger off for directories w/ just static content and 
# allow auto indexing. 
<Location ~ ^/(stylesheets|javascripts|images|snapshots|fonts)/> 
    PassengerEnabled off 
    FileETag None 
    # Options -Indexes 
</Location> 

,這樣,當這個詞實際上是將只匹配第一件事在路上。