2013-05-05 67 views
2

我在我的智慧結尾。我試圖通過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處理程序:

而且你可以看到,與IgnoreRoute明確指定,在cassette.axd路徑確實地圖,但只有這樣的路徑:

如果你把一個斜槓在它的結束要麼它不工作:

編輯2:我已經更新了網站只是鏈接到/Content/main.css文件,以便此問題得到排序時該網站顯示正確;如果您在瀏覽器中檢查網絡請求,您會看到Cassette包失敗的請求。

回答

3

我已經提交了錯誤的單bug跟蹤系統,希望得到一個答案,爲什麼發生這種情況:

https://bugzilla.xamarin.com/show_bug.cgi?id=12190

更新:我已經找到了問題的原因。在OpenSUSE下,mono和XSP被分開打包。儘管我將Mono升級到3.0.10,但XSP/FastCGI仍然保持在2.10.2.0版本。當我將XSP/FastCGI軟件包升級到2.11.0.0時,問題消失了。

相關問題