Ekkmanz in geeky life!

2 กันยายน 2008

ลง Rails บน Apache ของ winXP โดยไม่ใช้ InstantRails

Filed under: study — ekkman @ 12:09
Tags: , , ,

เนื่องจากการบ้านวิชา web app engineering นั้น อ. ได้แนะนำให้นักศึกษาใช้ ruby on rails เป็น Framework ในการเขียนเว็บ และด้วยความขี้เกียจลง Linux เนื่องจากรอเครื่องใหม่อยู่ เลยพยายามจะขืนลง rails บน notebook ปัจจุบัน ซึ่งมีอะไรต่อมิอะไรเต็มไปหมด เต็มเครื่องไปหมดแล้ว ทั้ง Apache, MySQL, php, SQL Server และอื่นๆ อีกมากมาย เลยทำให้เกิดอาการขี้เกียจไปหยิบ InstantRails มาลงซะงั้น เลยต้องลง Rails ให้ connect บน Apache เอง (เพราะว่าจะได้ใช้ url แบบเดียวกันไม่ต้องแยก 1 rails 1 process) และเนื่องจากว่าไม่สามารถหา mod_rails เวอร์ชัน windows มาไ้ด้ ก็เลยทำให้ต้องมานั่งเซตเอง

อ้างอิงเนื้อหาส่วนใหญ่มาจาก:

Serving Multiple Rails Applications on Windows with Apache and Mongrel

ก็วิธีการคร่าวๆ มีดังนี้:

  1. ลง ruby, rails, mongrel
    • เริ่มจาก download และ install ruby เวอร์ชันล่าสุด
    • จากนั้นก็เปิด command line ขึ้นมา แล้วก็ลองสั่ง gem -v เพื่อดูว่า gem สามารถทำงานได้รึเปล่า
    • ถ้าขึ้น command not found ให้เพิ่ม path ของ binary ของ ruby เข้าไป (ปกติจะอยู่ที่ C:\ruby\bin)
    • ลง rails โดยสั่ง gem install rails –include-dependency ที่ command line
    • ลง mongrel โดยสั่ง gem install mongrel –include-dependency อย่าลืมเลือก version ที่เป็นของ windows ด้วย
    • ทดสอบการติดตั้งด้วยการลอง create rails app แล้ว start mongrel ดู
  2. register mongrel ใ้ห้เป็น service

    • ลง mongrel rails service โดยสั่ง gem install mongrel_service
    • สร้าง service (1 rails app ต่อ 1 service) โดยสั่งคำสั่งข้างล่างนี้: (myapp หมายถึงชื่อ app ที่ใช้อยู่)
      mongrel_rails service::install -N myapp \
            -c c:\my\path\to\myapp -p 4000 -e production
    • ทดสอบด้วยการสั่ง net start myapp จะได้ว่า mongrel รันที่ port 4000
    • ลองเข้า http://localhost:4000 ควรจะขึ้นหน้า Default ของ rails
  3. เซตให้ Apache ทำการ forward request ไปหา mongrel
    • แก้ httpd.conf ใ้หเพิ่มบรรทัดดังนี้: (หรือว่า uncomment ก็ได้)
      LoadModule proxy_module modules/mod_proxy.so
      LoadModule proxy_http_module modules/mod_proxy_http.so
      ProxyRequests Off 
      
      <Proxy *>
        Order deny,allow
        Allow from all
      </Proxy>
    • สร้าง Alias ให้กับ folder ของ /public ของ app ของเรา
      Alias /app1 "c:/web/app1/public"
      <Directory "C:/web/app1/public">
          Options Indexes FollowSymLinks
          AllowOverride none
          Order allow,deny
          Allow from all
      </Directory>
    • ตั้ง Apache ให้ forward request ไปยัง mongrel
      ProxyPass /app1/images !
      ProxyPass /app1/stylesheets !
      ProxyPass /app1/javascripts ! 
      
      ProxyPass /app1/ http://127.0.0.1:4000/
      ProxyPass /app1 http://127.0.0.1:4000/
      ProxyPassReverse /app1/ http://127.0.0.1:4000/

      สามบรรทัดบน เป็นการตั้งค่าไม่ให้ forward image, css, js ไปที่ mongrel ให้ Apache รับ request จะได้เร็วขึ้น (นิดนึง)
      สามบรรทัดล่าง เป็นการบอก Apache ให้ส่ง request ไปที่ http://127.0.0.1:4000/ (ซึ่งเราตั้งให้เป็น mongrel)

    • restart Apache แล้วลอง test ได้เลยครับ !!!

ส่วนใครที่ลง linux ก็ยินดีด้วยครับ ท่านสามารถติดตั้งผ่านทาง passenger ได้อย่างสะดวกมากๆ ผมได้ลง rails บน linux ก่อนลงเครื่องตัวเอง (Windows XP) ซะอีก ไม่ยากครับ

EDIT (4 กันยายน): config ด้านบนนี่ถือว่ายังไม่ได้นะครับ ตอนนี้เจอปัญหาว่าไม่สามารถจะ route ไปที่ localhost ได้เลย ถ้าสามารถแก้ปัญหานี้ได้แล้วจะ post ต่ออีกทีครับว่าเซตยังไง🙂

ให้ความเห็น »

ยังไม่มีความเห็น

RSS feed for comments on this post. TrackBack URI

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

บลอกที่ WordPress.com .

%d bloggers like this: