2. Clone Django App ลงมา
ในที่นี้จะ clone pizza999 ลงมานะ
heroku git:clone -a pizza999
3. Backup Database และ Download ลงมา
heroku pg:backups:capture -a pizza999
heroku pg:backups:download -a pizza999
4. สร้าง Virtualenv เพื่อลง Python Packages
virtualenv venv
source venv/bin/active
หลังจากนั้นลง Python Packages ตามที่ระบุในไฟล์ requirements.txt
pip install -r ./pizza999/requirements.txt
5. สร้างไฟล์ .env เพื่อเป็น Key-Value เช่นเดียวกับที่อยู่ใน Heroku App Config Vars
cd pizza999
touch .env
nano .env
เปิดเวบแล้วเข้าไปดูใน Settings > Config Vars แล้วก๊อปมาวางใน .env
แต่!!
- DATABASE_URL ไม่จำเป็นต้องเหมือนกับ Production
- เพิ่ม DEBUG=True
จะได้ประมาณนี้
ให้จำไว้ว่า Database ที่เราตั้งมี User , Password , DB อะไร
ในที่นี้ ที่เราตั้งตามใจสำหรับ Local คือ
user = root
password = admin
db = pizzadb
สำหรับ DEBUG=True จะเอาไว้ใช้กับ Settings.py ตรงบรรทัด
DEBUG = os.environ.get(‘DEBUG’, False)
อธิบายว่าได้ว่า ถ้าเจอ Key DEBUG ก็ให้อ่าน Value มา แต่ถ้าไม่เจอก็จะได้ False เป็น default , ซึ่งใน Config Vars เราไม่ได้มีไว้ มันจึงเป็น False สำหรับ Production เสมอ
- **** แก้ไข *****
- settings.py ตรงบรรทัด DEBUG ให้แก้เป็นตามนี้
DEBUG = (os.environ.get('DEBUG', False) == 'True')เพราะ os.environ.get จะคืนค่าเป็น String แต่ตัวแปร DEBUG ต้องการค่า boolean ดังนั้นจึงใช้ == 'True' เพื่อช่วยดำเนินการ
6. Run Postgres Docker Container
รันจากไฟล์ docker-compose.yml ง่ายดีนะ ไม่ต้องพิมพ์คำสั่งยาวๆ ทุกครั้ง ดังนั้นก็สร้างไฟล์เลย
touch docker-compose.yml
nano docker-compose.yml
****** ต้องให้ user, password, db ให้เหมือนกับในไฟล์ .env ในข้อ 5. *****
แล้วก็ up เลย!
docker-compose up -d
7. ทดสอบการเชื่อมต่อด้วย psql แล้ว import dump
psql -h localhost -U root -p 5432 -d pizzadb
ใช้คำสั่งต่างๆ ใน psql shell
\l # list dbs
\c pizzadb # swith to db
\dt # list tables
\q # exit
\q ออกมาจาก psql shell ก่อน แล้วใช้คำสั่ง import dump file ดังนี้
pg_restore --verbose --clean --no-acl --no-owner -h localhost -U root -d pizzadb latest.dump
8. Locally RUN!!
heroku local web
ใช้คำว่า web ตามที่ระบุใน Profile
ถ้าไม่ระบุ port จะได้ http ที่ port 5000
ได้แล้ว !!!! ไหนลองเข้าหน้า admin ซิ …
OK! แสดงว่า ทุกอย่าง ผ่านได้ด้วยดี สบายๆ :)
ปล. ถ้ารูปไม่ขึ้นอาจจะต้อง python manage.py collectstatic
ถ้าเป็นการ clone จาก github repo ก็อาจจะเพิ่ม
git remote add heroku https://git.heroku.com/YourAppName.git
เข้าไปด้วยจะได้ เผื่อว่าอยากจะ deploy ไป heroku ก็จะได้สั่ง
git push heroku master ได้นั่นเอง