偶知道大家都不提倡在windows下進行rails的開發,更不提倡在windows下進行rails的部署。。。。
但是有個項目確實存在這個需求,既然平台因素無法忽略,就只好逆天而行了…
思路:Nginx實現前端(有人說nginx在windows下效能不穩定,會出現各種莫名奇妙的問題,汗~~), 提供SSL單向和雙向認證(針對不同的用戶端提供不同的認證方式…),提供靜態頁面、圖片、js、css檔案, 其餘代理到後端的mongrel.(部分功能未實行,發布時也是以developmen模式發布的)
Mongrel後端伺服器(為什麼passenger沒有windows版的, mongre_rails竟然還不支援rails 3.0, 感覺自己嘗試的時候特悲劇)
步驟:1. mongrel安裝
2.為mongrel啟動rails註冊服務
3.下載nginx,並註冊服務
4.配置nginx,實現SSL單雙向認證和代理功能
一、Mongrel安裝
gem install mongrel
二、為mongrel啟動rails註冊服務
1. 下載微軟的2個工具: instsrv.exe、srvany.exe, 細節參考 三、下載nginx,並註冊服務
2.為rails啟動書寫一個rails.bat檔案,內容如下:
cd D:\WEB_APP\SVNMSC:\ruby187\bin\rails s -p 3003 -b 127.0.0.1
#-b 127.0.0.1 只綁定127.0.0.1,限定只能本機訪問,由於前端nginx也是在本機運行,意思是僅運行nginx直接存取, 外部使用者只能通過nginx才能訪問
3. 為rails.bat註冊服務,細節參考 三、下載nginx,並註冊服務
4. SVNMS.reg檔案內容如下:
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SVNMS] "Description"="SVN Manager Sysetem: D:\\WebApp\\SVNS\\rails s -e development""DisplayName"="SVNMS" [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SVNMS\Parameters] "Application"="D:\\WEB_APP\\rails.bat""AppParameters"="""AppDirectory"="D:\\WEB_APP\\SVNMS"
三、下載nginx,並註冊服務
1. 下載nginx windows版本 http://www.nginx.org
2. 下載微軟的2個工具: instsrv.exe、srvany.exe
去微軟網站下載安裝Windows Server 2003 Resource Kit Tools(rktools.exe),它包括標題提及的所有必要的工具,下載完安裝好。
3. 運行命令
在rktools安裝目錄下(一般在C:\Program Files\Windows Resource Kits\Tools目錄)可以發現這兩個程式.在運行下面命令之前,確保將instsrv.exe、srvany.exe複製到nginx的安裝(解壓)目錄下,然後運行:
instsrv NGINX c:\nginx\srvany.exe #註冊服務
3.在c:\nginx\下,編輯一個nginx.reg檔案
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NGINX\Parameters] "Application"="C:\\nginx\\nginx.exe" "AppParameters"="" "AppDirectory"="C:\\nginx\\"
參數解釋:Application:exe或bat檔案的絕對路徑
AppParameters: 運行參數
AppDirectory:工作目錄,就是工作時目前的目錄
4.讓服務與程式關聯起來, 命令列執行
regedit /s nginx.reg
5.編輯啟動nginx指令碼start-nginx.bat(關閉指令碼不用變), 讓程式以服務方式運行
@ECHO OFF net stop nginx net start nginx EXIT
6.刪除服務
sc delete SVNMS
補充:但是,當停止Nginix服務後,訪問瀏覽器仍然能看到網站。查看進程,你會發現,Nginx啟動了兩個nginx進程(根據nginx.conf的配置worker_processes ,Fork出來的進程顯然沒有被停止,結果就是nginx永遠關不掉。因此徹底關閉nginx請使用taskkill命令:
taskkill /F /IM nginx.exe > nul
結果是寫一個stop_nginx指令碼來處理nginx停止的所有操作
@echo off echo Stopping nginx service... net stop nginx echo Kill nginx process... taskkill /F /IM nginx.exe > nul
四、配置nginx,實現SSL單雙向認證和代理功能
server { listen 8083; server_name liuwm-pc@grandsoft.com.cn; root D:/www-date/public; location / { root D:/WEB_APP/SVNMS/public; #proxy
proxy_set_header Host $host:8083; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://127.0.0.1:3003/; proxy_set_header X-Forwarded-Proto https; proxy_redirect off; } #SSL ssl on; ssl_certificate E:/nginx/nginx-1.1.7/ssl/server.crt; ssl_certificate_key E:/nginx/nginx-1.1.7/ssl/server_no.key; ssl_client_certificate E:/nginx/nginx-1.1.7/ssl/ca.crt; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
參考:windows下nginx+mongrel配置