我在我的智慧結尾。我試圖通過FastCGI在Mono下運行ASP.NET MVC 3網站,並且Cassette的HTTP處理程序將無法正確註冊。該網站是http://www.tychaia.com/。未在Mono MVC 3下正確註冊的HTTP處理程序
奇怪的是:
- 它的工作我的本地機器的罰款。
- 當生產機器上的網站在
xsp4
下運行時,它工作正常。 - 當生產機器上的網站在
fastcgi-mono-server4
下運行時,它無法正常工作。
事情我已經嘗試:
- 檢查Nginx的配置,並確定它傳遞所有正確的FastCGI參數(這是)。
- 單聲道3.0.7和3.0.10。一個朋友在3.0.7下工作,但對我來說沒有骰子。
正是這種特殊的Web.config條目:
<add path="cassette.axd" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" />
(https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Web.config#L47)
至於我可以告訴大家,我有導致此問題的兩個問題:
- MVC的IgnoreRoute與
cassette.axd
網址不匹配,即使明確指定爲https://github.com/hach-que/Tychaia/blob/master/Tychaia.Website/Global.asax.cs#L20(並且它工作在聯合國版本der普通老XSP4)。當我爲字符串「cassette.axd」添加一個明確的IgnoreRoute(通過執行routes.IgnoreRoute("cassette.axd");
),它開始傳遞給處理程序,除了: - 服務器的HTTP處理程序路徑匹配似乎只是確切在FastCGI下匹配。即使我關閉了網站中的所有MVC註冊,處理程序只匹配
cassette.axd
,即使如此,處理程序似乎也沒有任何路徑信息。 - 當我添加更多的條目,如
<add path="cassette.axd/*" verb="*" type="Cassette.Aspnet.CassetteHttpHandler, Cassette.Aspnet" />
這些也開始被處理程序處理,但它不響應,因爲它通常應該在該URL;您只需獲取默認值,就好像沒有其他URL參數(可能它們正在被HTTP處理程序路徑匹配所使用)。
即FastCGI的是目前設置的方法是:
- 主要Nginx的實例,它僅僅是一個反向代理到更多的Nginx的情況下(我運行多個網站,我喜歡讓他們隔離)。它指向:
- Nginx實例,通過UNIX套接字調用FastCGI。
同樣,這個問題不會發生在XSP4下,它的只有發生在FastCGI下。儘管我可以將代理轉換爲XSP4實例,但由於性能方面的原因,我很猶豫。
還有什麼我可以在這裏失蹤?
編輯:這裏的一些網址,應該工作。正如你所看到的,他們擊中StaticFileHandler的不是紙盒HTTP處理程序:
- http://tychaia.com/cassette.axd/stylesheet/nDvbK5eAxf6miyaRa_J0vl7YdxA=/Content
- http://tychaia.com/cassette.axd/script/oz4BBh-gK6gJkhB5S64l3mXseFQ=/Scripts
而且你可以看到,與IgnoreRoute明確指定,在cassette.axd
路徑確實地圖,但只有這樣的路徑:
如果你把一個斜槓在它的結束要麼它不工作:
編輯2:我已經更新了網站只是鏈接到/Content/main.css
文件,以便此問題得到排序時該網站顯示正確;如果您在瀏覽器中檢查網絡請求,您會看到Cassette包失敗的請求。