Rails, Apache, CGI/FastCGI on Windows

文章日期:12/31/2007 12:47 am

Rails, Apache, CGI/FastCGI on Windows

安裝 typo 時, 在 apache 2 + windows 上碰到不少問題, 其實 Rails 1.0 產生出來的應該很好設定, typo 可能是比較早開發加上有調整過困擾了我, 把一些細節記錄下來以免忘記!

  1. 安裝 Apache 2, MySQL
  2. 安裝 Ruby, Rails
  3. 開始新的 web app, 打開 Dos Command Prompt
    > rails my_app
    > cd my_app
    > ruby script/server
  4. 請用 http://localhost:3000 看是否運作
  5. 詳細請參考 Rolling with Ruby on Rails
接下來我們進入正題, 當你有了 web app 後, 如何和 Apache 一起工作.

1. CGI 法
  • 打開 rewrite 功能, 移除 "#", 重要!
    LoadModule rewrite_module modules/mod_rewrite.so
  • virtual host 設定
    <VirtualHost *:80>
    ServerName mywww
    DocumentRoot d:/my_app/public/
    ErrorLog d:/my_app/log/server.log

    <Directory d:/my_app/public/>
    SetEnv RAILS_ENV production
    Options +FollowSymLinks +ExecCGI
    AllowOverride all
    Allow from all
    Order allow,deny
    </Directory>
    </VirtualHost>
  • 要設定, my_app/public 下的檔案, 基本上 Rails 1.0 產生出來是不用動.
    • .htaccess
      a) RewriteBase 要關閉
      #RewriteBase /myrailapp
      b) RewriteRule 要用 dispatch.cgi
      RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
    • 確定 dispatch.cgi 及 dispatch.fcgi 第一行, 要指到 ruby
      #!d:/usr/ruby/bin/ruby
  • 打開 c:/WINDOWS/system32/driver/etc/hosts 檔案, 加上
    127.0.0.1 mywww
  • 重新起動 Apache, http://mywww/ 或 http://localhost/
  • Alias 設定, 記得上面都要成功再來試 oh!
    • 加入這一段, 成功後可以移除上面 virtual host 設定
      Alias /myapp "d:/my_app/public"
      <Directory d:/my_app/public/>
      SetEnv RAILS_ENV production
      Options +FollowSymLinks +ExecCGI
      AllowOverride all
      Allow from all
      Order allow,deny
      </Directory>
  • 記得要改 my_app/public 下的檔案
    • .htaccess, 記得要打開 RewriteBase
      RewriteBase /myapp
  • 重新起動 Apache, http://localhost/myapp
2. FastCGI 法
  • 記得請先作完上面方法確定成功後再用 FastCGI 加快, 也比較好找問題
  • 安裝 FastCGI for Apache, 請下載 RubyForApache
    PS. 記得安裝時只要選擇 mod_fastcgi 就好了!!!
  • 設定你的 Apache
    • 加上 FastCGI module 功能
      #FastCGI
      LoadModule fastcgi_module modules/mod_fastcgi.so
      FastCgiConfig -restart-delay 120 -idle-timeout 150 -appConnTimeout 100 -init-start-delay 100 -startDelay 100 -maxProcesses 1 -minProcesses 1 -processSlack 1 -initial-env RAILS_ENV=production
  • 設定你的 my_app/public
    • .htaccess 要改成
      #RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
      RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
  • 重新啟動 Apache, http://localhost/myapp 應該會快一點