讓 asp.net 在 mac 上飛
.NET 不跨平臺一直飽受爭議,雖然微軟前端時間放出些訊息,要支援.NET跨平臺的發展,但是微軟一直堅持著不主動、不拒絕、不負責的三不態度,仍然用一種軟體帝國的心態,折騰著一些毫無新意的東西。微軟想要重新獲得大眾的尊重和認可,必須丟棄一些傳統的觀念,積極聽取開發者的聲音,和開發者站在一起共同發展,而這似乎看起來任重而道遠。
跨平臺是一種趨勢,到最後,微軟也不得不低頭。mono 一直在微軟的白眼下發展,到如今也算是非常不錯了,雖然還不能支援.NET Framework 的全部特性,但對我們來說已經夠用了,目前它已經支援 C# 4.0、ASP.NET MVC 4,也有很多開源元件把是否相容 mono 框架作為一項重要指標。
作為一個企業來講,降低硬體裝置成本是實施一套軟體系統重點要考慮的事情,很多企業為了節約成本,不得不選擇其他一些低造價的程式語言,如 java、 php 等,這也是園子裡面某些 .neter 們自覺低人一等的重要原因,也是 javaer 們經常大罵 .net 的常用手段,有了 mono, 你可以構建更為廉價的解決方案,讓那些不懂裝懂,鄙視你們的人去死吧。
今天我就要把 asp.net 程式搬到 mac 上去執行。
我們都知道 asp.net 程式不能單獨執行,必須把它託管到 web 應用伺服器上,在 windows 上我們基本上就是 IIS,IIS非常強大,管理也方便,在 mac 上我們裝不了 IIS ,但我們還有別的工具,因為不管什麼 web 應用伺服器他們的原理都差不多,無非就是監聽 http 請求,然後根據我們設定的路由規則把請求對映並轉發到對應的處理程式上。
支援 mono 的應用伺服器有很多,如 apache,nginx 等。
apache 不用多說,高大上的 java 界是個人都知道的東西,但我今天用的是 nginx。nginx 通常結合 keepalive 來做負載均衡,但它也是一個非常強大的 http 伺服器。
第一步,下載:
點這裡去下載 nginx 。我這裡選的是 1.2.9 的版本,目前最新的是 1.7.1,別問我為什麼不用最新版的,因為我從 1.4.0 裝到 1.7.1,沒一次在我的 mac 上裝成功了,我也不想折騰了,傷身啊。
第二步,解壓:
下載好了,我們進入 downloads 目錄解壓:
zhaoguihuadediannao:/ zhaogh$ cd ~/download
zhaoguihuadediannao:downloads zhaogh$ tar nginx-1.2.9.tar.gz
第三步,安裝前的配置
zhaoguihuadediannao:downloads zhaogh$ cd nginx-1.2.9
zhaoguihuadediannao:nginx-1.2.9 zhaogh$ sudo ./configure --prefix=/usr/local --with-http_ssl_module
這裡主要是指定 nginx 的安裝路徑。
第四步,編譯安裝
zhaoguihuadediannao:nginx-1.2.9 zhaogh$ sudo make
zhaoguihuadediannao:nginx-1.2.9 zhaogh$ sudo make install
第五步,執行測試
zhaoguihuadediannao:nginx-1.2.9 zhaogh$ cd /usr/local/sbin
zhaoguihuadediannao:sbin zhaogh$ sudo ./nginx
在瀏覽器開啟 http://localhost/ ,如果能看到下面幾個字,那麼我想恭喜你,你的努力沒白費,哥看到了你的成長和進步,可哥的辛苦又有幾人看到,我為了這幾個字折騰了好久。
Welcome to nginx!
想要我們做的 asp.net 程式能夠在 nginx 上執行,光上面幾步還不行,我們還要做一些基本的配置。
第六步,編輯配置
用 vi 開啟 nginx.conf 檔案
zhaoguihuadediannao:~ zhaogh$ cd /usr/local/conf
zhaoguihuadediannao:conf zhaogh$ vi nginx.conf
修改下面標顏色的內容,其他的不用動:
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm Default.aspx default.aspx;
fastcgi_index Default.aspx;
fastcgi_pass 127.0.0.1:9000;
include /usr/local/conf/fastcgi_params;
}
然後修改 /usr/local/conf/fastcgi_params 檔案,加上下面幾行:
# mono
fastcgi_param PATH_INFO "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
第七步,啟動 fastcgi-mono-server:
zhaoguihuadediannao:~ zhaogh$ fastcgi-mono-server2 /applications=localhost:/:/projects/website/ /socket=tcp:127.0.0.1:9000
記得把 /projects/website/ 這段改成你的程式目錄,這個程式我是直接用 xamarin 模板做的一個 web application 。
第八步,啟動 nginx:
zhaoguihuadediannao:conf zhaogh$ sudo /usr/local/sbin/nginx -s quit
zhaoguihuadediannao:conf zhaogh$ sudo /usr/local/sbin/nginx
zhaoguihuadediannao:conf zhaogh$
現在我們再到瀏覽器上輸入 http://localhost/ 看看什麼結果,有圖有真相,絕不忽悠。
你完全可以把你在 vs 上做的 asp.net mvc 程式用 xamarin 編譯好之後,放在 nginx 上去執行,不信你可以去試一試。我們也要響應黨的號召,少用或是不用 windows 系統,以後再有客戶跟你說 .net 不上檔次,你就讓他去死吧。