วันศุกร์ที่ 15 เมษายน พ.ศ. 2559

Deploy Web App to Heroku "Part 2" เริ่ม Deploy App

Deploy Web App to Heroku "เริ่ม Deploy App"

      ในการทดสอบในครั้งนี้ผมได้ใช้ Wordbank App ในการ Deploy น่ะครับสามารถดูได้ที่

 https://bitbucket.org/staticsuriya/assignment-wordbank 
หรือ
 $ git clone https://staticsuriya@bitbucket.org/staticsuriya/assignment-wordbank.git

  • เข้าไปใน Directory ที่เราต้องการ Deploy ในที่นี้คือ assignment-wordbank น่ะครับ    


  • จากนั้นให้สร้าง virtual environment สำหรับ project 
$ virtualenv venv


 สร้างเสร็จจะมี folder ชื่อ venv ขึ้นมาใหม่

จากนั้นก็ทำการ activate virtualenv ให้ทำงาน
$ source venv/bin/activate
ถ้าไม่มีปัญหาจะมี (venv) อยู่ข้างหน้าหมายถึง virtualenv activate แล้ว (ถ้าปิดเปิด terminal ใหม่แล้วต้องการมาทำ project ต้อง activate ใหม่ทุกครั้ง) ตั้งแต่ step นี้ไปจะต้อง activate เอาไว้


  • สร้างไฟล์ requirements.txt เพื่อบอกให้ heroku รู้ว่า project ของเราต้องลงโปรแกรมอะไรบ้างในการจะ run project ในที่นี้ผมใช้ 
          dj-database-url==0.4.0
          Django==1.9.2
          gunicorn==19.4.5
          psycopg2==2.6.1
          whitenoise==2.0.6
          pdfkit==0.5.0
          Pillow==2.7.0


  • สร้างไฟล์ Procfile ขึ้นมา(ไม่มีนามสกุล) เพื่อเป็นการบอกให้ heroku รู้ว่าจะต้องรัน app ตัวไหน


          ภายในให้เขียนตามนี้ เพื่อบอกให้ run wsgi ของ project " web: gunicorn ชื่อของproject.wsgi --log-file - " ในที่นี้ project ชื่อ assignment_one ก็จะต้องใส่เป็น 
web: gunicorn assignment_one.wsgi --log-file - น่ะครับ
  • ให้ virtuallenv ทำการ ติดตั้งไฟล์ทั้งหมดที่จะเป็นในการรัน จาก list โปรแกรมใน requirements.txt (เพื่อจะนำมาลอง run แบบ local ในเครื่องก่อน deploy ) ครับ
$ sudo pip3 install -r requirements.txt




 แต่จะมีปัญหากับ app psycopg2 เพราะ จะต้องทำการลง code python เสริมก่อนด้วยคำสั่ง
$ sudo apt-get install libpq-dev && sudo apt-get install python3-dev
 แล้วลอง run ใหม่ ก็จะ install ผ่านไม่ติดตัวแดง
$ sudo pip3 install -r requirements.txt

  • เริ่มทดลอง run code จริง แบบ local ก่อน จะ deploy ลง heroku เพื่อทดสอบการทำงานครั้งสุดท้าย
    $ heroku local web

    แล้วลอง เข้า browser localhost:5000 (heroku จะใช้ port 5000 เป็นส่วนใหญ่) วิธีปิด heroku local web ให้กด ctrl+c


สามารถทำงานได้ตาม ปกติเเต่ไม่สามารถที่จะเเสดง CSS ได้
          วิธีการที่จะทำให้สามารถที่จะโหลด css ได้นั้นให้เข้าไปใน directory ของ project เปิดไฟล์ setting.py แล้วเพิ่ม code ตามนี้


import dj_database_url
# ไว้ด้านบนของไฟล์



PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/


STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles')
STATIC_URL = '/static/'

# Extra places for collectstatic to find static files.

 
STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)

# Simplified static file serving.
# https://warehouse.python.org/project/whitenoise/

 
STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage'
# ไว้ด้านล่างสุดของไฟล์ เดิมๆจะมี static_url ='/static/' อยู่แล้วให้ ลบตัวเก่าไป แล้วcode ด้านบนใส่ลงให้หมด


          ใน directory เดิม ให้สร้าง folder static ขึ้นมา และมีสร้างไฟล์อะไรก็ได้สักอันขึ้นมา เพราะ git จะไม่สนใจ folder เปล่าเวลา add 
          ในตัวอย่างนี้สร้างไฟล์ ชื่อ human.txt เอาไว้ ข้างในไม่ต้องพิมพ์อะไร เมื่อทำเสร็จทั้งหมดให้พิมพ์คำสั่ง (อย่าลืมว่าต้อง activate virtual venv ไว้ตลอด)
$ python manage.py collectstatic
ตอบ ' yes '
          คำสั่งนี้จะจัดการเอาไฟล์ static ทั้งหมดทุก app ที่เรามีรวมถึงรูปด้วยมาเก็บไว้ ใน folder ชื่อ staticfiles อยู่ใน folder projectหลังจากนั้นเปิด wsgi.py ไฟล์ ที่อยู่ใน folder project
แล้วเพิ่ม code ด้านล่าง

from whitenoise.django import DjangoWhiteNoise
application = DjangoWhiteNoise(application)


          ส่วนนี้คือให้โปรแกรม whitenoise จัดการ serve static file ให้กับ project ของเราไปแสดงผล เสร็จทั้งหมดนี้ก็ทดลองรัน heroku แบบ local
$ heroku local web
ก็จะเห็นได้ว่าสามารถที่จะโหลด CSS ได้เเล้ว ^^
  •   เริ่มเอา app ไป deploy จริง ต้อง commit git ก่อน deploy แต่เพื่อป้องกันไฟล์ที่ไม่เกี่ยวข้องให้เเก้ไขไฟล์ .gitignore ก่อน เข้าไปใน project ย้อนกับมาในหน้าที่มี manage.py

    กด ctrl+h เพื่อเเสดงไฟล์ที่ซ่อนอยู่ครับ

    เข้า .gitignore เพื่อทำการเเก้ไข ให้เเก้เป็น 
          venv
          *.pyc
          staticfiles
          .env

เเก้เสร็จกด save เลยครับ
     หลังจากนั้นก็ commit แล้วเอา code อัพขึ้น heroku

 $ git add .
 $ git commit -m "Added a Procfile."
 $ heroku create
    ถ้า heroku ถาม E-mail กับ Password ก็ให้ใส่ E-mail กับ Password ที่ได้ไปสมัคเว็บ Heroku มาน่ะครับ จากนี้เราก็ push web ของเราขึ้นไปเลยครับ
 $ git push heroku master
    รอจนเสร็จ.... ถ้าไม่มีอะไรผิดพลาดจะได้ดังรูปน่ะครับ ว่า deploy... done. จากนั้นเราก็สามารถที่จะดูเว็บของเราได้โดยการใช้คำสั่ง
 $ heroku open
 หน้าเว็บก็จะเปิดขึ้นมาครับ
    เเต่ url ที่ได้จะเเปลกๆซักหน่อยน่ะครับ
วิธีในการ rename app ของเราคือ การใช้คำสั่ง
 $ heroku apps:rename my_new_app_name
ในที่นี้ผมต้องการจะได้ชื่อว่า wordbankapp ผมจึงใช้
 $ heroku apps:rename wordbankapp



เสร็จเรียบร้อยครับการ Deploy App ขึ้น Heroku ของเรา ^^

นี้คือตัวเว็บที่ได้น่ะครับ https://wordbankapp.herokuapp.com


ไม่มีความคิดเห็น:

แสดงความคิดเห็น