หลังจากครั้งที่แล้ว ได้รู้จักกับ Heroku และติดตั้ง Heroku Toolbelt ไปแล้ว ตอนนี้เราพร้อมสำหรับการเริ่มต้นเขียนโค้ดแล้ว ในบทความตอนนี้ จะเป็นวิธีการรันแอปบนเครื่องตัวเองก่อนที่จะส่งแอปไปรันบน Heroku

การสร้างแอปไปรันบน Heroku จะทำผ่าน heroku toolbelt ส่วนของโค้ดที่จะเขียน ก็ใช้ text editor ได้ตามความถนัดครับ โค้ดตัวอย่างเริ่มต้น ผมเลือกภาษา Python และ Flask web framework มาให้ดู เพราะโค้ดที่สั้น เข้าใจง่าย

heroku supported languages

เพื่อให้แน่ใจว่า เราสมัครใช้งาน heroku และติดตั้ง toolbelt เสร็จแล้วให้รันคำสั่ง

$ heroku login

ให้ใส่ email และ password ตามที่สมัครไว้ที่หน้าเว็บในครั้งที่แล้ว เมื่อเสร็จแล้วให้สร้างไดเรคทอรี่สำหรับเริ่มต้นเขียนโค้ดกัน ผมสร้างไดเรคทอรี่ชื่อ helloworld จากนั้นก็เข้าไปในไดเรคทอรี่
$ mkdir helloworld
$ cd helloworld
ต่อมาเราจะสร้าง virtual environment สำหรับเขียน Python ด้วย virtualenv เพื่อให้สภาพแวดล้อมการเขียนโค้ดของเรา มีแค่ที่จำเป็นต้องใช้จริงๆเท่านั้น ไม่ไปยุ่งกับแพคเกจหลักของ Python ในเครื่องเราที่อาจจะมีอยู่บ้างแล้ว หลังจากเข้ามาในไดเรคทอรี่ helloworld แล้ว ให้รันคำสั่ง virtualenv venv จะได้ไดเรคทอรี่ venv เพิ่มมา เพื่อเริ่มใช้งานสภาพแวดล้อมจำลอง ให้รันคำสั่ง source venv/bin/activate เมื่อรันเสร็จจะมี (venv) อยู่หน้า command prompt ของเรา

vevn activate

ถ้าไม่ต้องการใช้ venv แล้วก็ให้รันคำสั่ง deactivate เพื่อออกจาก venv แต่โค้ดของเราตอนนี้ จะทำงานภายใต้ venv ครับ

ขั้นตอนต่อไปติดตั้งแพคเกจที่จำเป็นต้องใช้ โดยตอนนี้เราจะใช้ Flask และ gunicorn ให้ติดตั้งแพคเกจผ่าน pip
$ pip install Flask gunicorn

Downloading/unpacking Flask
  Downloading Flask-0.9.tar.gz (481kB): 481kB downloaded
Downloading/unpacking gunicorn
  Downloading gunicorn-0.17.2.tar.gz (360kB): 360kB downloaded
  Running setup.py egg_info for package gunicorn

Downloading/unpacking Werkzeug>=0.7 (from Flask)
  Downloading Werkzeug-0.8.3.tar.gz (1.1MB): 1.1MB downloaded
Downloading/unpacking Jinja2>=2.4 (from Flask)
  Downloading Jinja2-2.6.tar.gz (389kB): 389kB downloaded

Installing collected packages: Flask, gunicorn, Werkzeug, Jinja2
  Running setup.py install for Flask
  Running setup.py install for gunicorn
  Running setup.py install for Werkzeug
  Running setup.py install for Jinja2

Successfully installed Flask gunicorn Werkzeug Jinja2

ติดตั้งเสร็จแล้ว เริ่มเขียนโค้ดกันได้เลย ผมสร้างไฟล์ชื่อ hello.py และข้างในไฟล์ มีโค้ดต่อไปนี้

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, World! from Flask'

โค้ดครบแล้วต่อมาสร้างไฟล์ชื่อ Procfile ใช้สำหรับให้ foreman รันแอปของเรา โดนข้างใน Procfile มีโค้ดต่อแบบนี้

web: gunicorn hello:app --log-file=-

ตัวคำสั่ง foreman จะถูกติดตั้งมาตอนที่เราติดตั้ง toolbelt ตอนนี้เรามี hello.py และ Procfile ครบแล้ว ต่อมาให้รันแอป โดยใช้คำสั่ง
$ foreman start
$ foreman start
เสร็จแล้วแอปของเราจะรันอยู่ที่ http://localhost:5000 ให้เปิดเว็บเบราเซอร์ หรือใช้ curl เรียกดู จะได้

Hello, World! from Flask

ตอนนี้โค้ดของเราทำงานได้แล้ว ต่อไปเราจะส่งโค้ดของเราไปรันอยู่บน Heroku หลักการก็คือ heroku จะให้เรา push โค้ดของเราผ่าน git ขึ้นไปบน heroku จากนั้น heroku จะรันโค้ดของเราให้ ก่อนจะ push โค้ดไป heroku ให้ commit โค้ดเข้า git ก่อน โดยเราจะต้องสร้างไฟล์ชื่อ requirements.txt เพื่อบอกว่า แอปของเราต้องใช้แพคเกจอะไรบ้าง เรียกว่า dependencies โดยสร้างผ่าน pip freeze
$ pip freeze > requirements.txt
ในไฟล์ requirements.txt จะมีข้อความแบบนี้

Flask==0.10.1
Jinja2==2.7.3
MarkupSafe==0.23
Werkzeug==0.9.6
gunicorn==19.1.1
itsdangerous==0.24
wsgiref==0.1.2

มันคือชื่อแพคเกจ และ เวอร์ชั่น ก่อนที่เราจะ commit โค้ดให้เพิ่มไฟล์ .gitignore เพื่อบอกกับ git ว่าไม่ต้อง เอาไฟล์หรือไดเรคทอรี่เหล่านั้นเข้าไปใน git repo ด้วย สิ่งที่เราไม่ได้ต้องการมี venv และ *.pyc ให้เพิ่มเข้าไปในไฟล์ .gitignore

venv
*.pyc

เสร็จแล้วให้ initial git และ commit ตามนี้ได้เลย
$ git init
$ git add .
$ git commit -m "Initial project"

จากนั้นเรามาสร้าง heroku แอปด้วยการสรั่งคำสั่ง heroku create มันจะสร้างแอปให้เรา โดยการสุ่มชื่อมาให้heroku create
แต่ถ้าเราอยากเปลี่ยนชื่อ ให้รันคำสั่ง heroku apps:rename ชื่อใหม่ --app ชื่อเก่า
heroku apps:rename
จริงๆแล้ว เราก็สมารถที่จะตั้งชื่อได้ตั้งแต่ตอนสร้างแอปแล้วด้วยคำสั่ง heroku create ชื่อแอป เสร็จแล้วเราจะ push โค้ดด้วยคำสั่ง

$ git push heroku master
git push heroku master
เสร็จแล้วครับแอปเรา เปิดดูแอปของเราด้วยคำสั่ง heroku open มันจะเป็นเว็บเบราเซอร์ไปยังหน้าแอปของเรา เท่านี้ก็เสร็จแล้วสำหรับการรัน Python แอปง่ายๆบน heroku ตอนต่อไปจะมาดูวิธีการดู log ของแอปครับ

Comments are closed.