heroku
Github | Git | Docker | Heroku | Javascript | Composer | Laravel | Bootstrap | JSLibrary | คำสำคัญ (Key)
10 คำสั่ง ก้าวแรกสร้าง app บน heroku

Heroku คือ บริการคลาวด์แบบ PaaS (Platform as a Service) มาจากคำว่า Heroic (กล้าหาญ) กับ Haiku (ร้อยกรองแบบนึงของญี่ปุ่น) ทำหน้าที่ให้บริการแอพพลิเคชันที่พัฒนาด้วยภาษา และฐานข้อมูลที่หลากหลาย ซึ่งบริการทั้งหมดของ Heroku อยู่บน Amazon's EC2 cloud-computing platform พัฒนาโดย Ruby เป็น Startup ก่อตั้งในปี 2007 ถูกซื้อในปี 2010 โดย Salesforce.com ในราคาราว $212 Million

บว่า อัพโหลด joom.htm เข้า heroku.com แต่ในแฟ้มมีการเชื่อมต่อ rsp80.css จากภายนอกผ่าน link type="text/css" ไม่เป็น https ปรากฎว่าถูก blocked ไม่สามารถทำ Mixed content บน heroku.com ได้ จึงต้องเปลี่ยนการอ้างถึง rsp80.css เป็น https

ารใช้บริการ heroku.com ผ่านเครื่อง Local แบบ heroku-cli (Heroku Command Line Interface) ขอเล่าการสั่งงานใน 10 ขั้นตอน หรือ 10 คำสั่งที่ทำให้การใช้งานครั้งแรกนี้ สำเร็จตามวัตถุประสงค์ คือ เพื่อสร้างเว็บเพจบน heroku.com ทำหน้าที่แสดงค่าจาก phpinfo(); ซึ่งขั้นตอนสำคัญมี 7 ขั้นตอนแรก ส่วนขั้นตอนที่ 8 ถึง 10 นั้นอาจช่วยสนับสนุนการใช้งาน กรณีมีปัญหา และเพิ่มทักษะการใช้คำสั่งให้ยืดหยุ่นขึ้น มาทำตามกันทีละคำสั่ง พร้อมอ่านคำอธิบายประกอบได้ครับ

MYTEST.BAT
mkdir test630313
cd test630313
git init
rem heroku login
heroku create test630313
echo ^<b^>Hi^</b^>>index.php
git add index.php
git commit -m "my test"
git push heroku master
heroku open

ก่อนเริ่มต้นขั้นตอนที่ 1 ต้องติดตั้งโปรแกรมอย่างน้อย 2 โปรแกรม คือ heroku-x64.exe จาก heroku.com เพื่อใช้งาน heroku-cli และ git จาก git-scm.com แล้วทดสอบว่าใช้งานได้หรือไม่ ด้วยการสั่ง DOS> git --version พบ git version 2.12.2 และ DOS> heroku -v พบ heroku/7.39.0 win32-x64 node-v12.13.0

หากติดตั้งทั้ง git และ heroku แล้ว ก็ให้ไปสมัครสมาชิกกับ heroku.com แล้วจด username และ password ไว้ เพราะการใช้งานต้องเชื่อมต่อกับ heroku เสมอ จากนั้นก็มา เริ่มต้นขั้นตอนแรก กันได้เลย

DOS 1> git init
ผลการสั่งเริ่มต้นสร้าง git จะพบ Initialized empty Git repository in D:/heroku/.git/ หากอยู่ใน D:\heroku ก็จะมีการสร้างห้อง .git ขึ้น สามารถเข้าห้องด้วยคำสั่ง cd .git เข้าไปดู แล้วใช้ type config จะมองเห็นค่าต่าง ๆ ที่อยู่ใน [core] แต่ในเบื้องต้น เพียงแต่สั่ง init แล้วไม่มี error message ปรากฎขึ้นมาก็ถือว่าสำเร็จแล้ว
DOS 2> heroku login (เข้ากด Login ใน browser)
สั่งเชื่อมต่อกับ heroku ทำให้ระบบสั่งเปิด heroku.com ผ่าน browser เพื่อให้ผู้ใช้กรอก user และ password ถ้ากรอกผ่าน เมื่อมาดูที่หน้าจอ heroku cli ก็จะขึ้น prompt รอคำสั่งในบรรทัดต่อไป ไม่หมุนติ้ว ๆ รอเหมือนตอนแรก
DOS 3> heroku create test630313 (ลบแล้ว สร้างชื่อเดิมซ้ำได้)
เราสามารถสร้าง application ผ่าน heroku cli หรือผ่าน web browser ที่หน้าแรกของ heroku.com โดยคลิ๊ก New, Crete New App แล้วกรอกชื่อ App ที่ต้องการ เช่น test630313 เป็นต้น
DOS 4> echo ^<?php phpinfo(1); ?^> > index.php
สร้างแฟ้ม index.php มีหลายวิธี กรณีนี้สั่งสร้างแฟ้มด้วยคำสั่ง echo ผลคือเขียนโปรแกรมด้วยภาษา php เรียก function phpinfo และการส่งเเลข 1 เป็นการระบบ option แบบ INFO_GENERAL แต่ถ้าไม่กำหนด option จะมาแบบ INFO_ALL ที่อาจรวมถึงค่าต่าง ๆ ที่เป็นความลับได้
DOS 5> git add index.php
กำหนดแฟ้มที่ต้องการ push หรือ upload ขึ้น server ถ้าใช้ git add . จะหมายถึงแฟ้มทั้งหมดจากทุก folder คำสั่ง add สามารถทำทีละแฟ้ม หากมีหลายแฟ้มก็พิมพ์ชื่อต่อกันได้ เช่น git add a.php b.php c.php จากนั้นตรวจสอบได้ว่ามีแฟ้มอะไร add ไปแล้วบ้าง ด้วย git status
DOS 6> git commit -m "my test"
คอมมิท คือ การมอบหมาย ส่วน -m คือ การระบุรายละเอียดสำหรับการ commit ในแต่ละครั้ง เพื่อให้การควบคุมรุ่น มีรายละเอียดให้ติดตาม อาจเขียนแบบ 5W1H แบบละเอียดเพื่อสื่อสารกับ developer team หรือเขียนแบบสั้น ๆ ก็ได้หากทำงานคนเดียว
DOS 7> git push heroku master
เมื่อเขียน code หรือแก้ไขแล้ว และให้รายละเอียดในการ commit แล้ว ก็มีขั้นตอนสุดท้าย คือ การ push แฟ้มที่เปลี่ยนแปลงในเครื่อง local ขึ้นไปยัง remote repository
DOS 8> heroku open
ตรวจสอบว่า push สำเร็จหรือไม่ โดยสั่งเปิด web application บน heroku ทำให้เปิดโปรแกรม Browser ด้วย URL = https://test630313.herokuapp.com
DOS 9> git remote -v (ตรวจว่า git เชื่อ heroku หรือไม่)
ตรวจสอบว่า git เชื่อมกับ heroku เรียบร้อยหรือไม่ หากไม่ได้เชื่อมต่อ ต้องทำขั้นตอนต่อไป add heroku เข้า git
DOS 10> heroku git:remote -a test630313
สั่งเชื่อม git กับ repository ใน heroku คือ การ add heroku repository เข้ากับ git มีผลให้แฟ้ม .git/config มีค่า url ใน [remote "heroku"] และสามารถใช้ git push ได้
https://dashboard.heroku.com/apps/test630313/settings
กรณีทำบทเรียนแรกสำเร็จ อยากท้าทายว่าให้เข้า dashboard แล้วเข้าไปลบ app จากนั้นเริ่มขั้นตอนที่ 1 ใหม่ จุดที่น่าสนใจคือ เมื่อสั่ง Delete app แล้ว สามารถสร้าง app ชื่อเดิมได้ทันที ไม่ต้องกังวลที่ต้องตั้งชื่อ application ใหม่
เฟรมเวิร์ค และแพลตฟอร์ม ฟรมเวิร์ค (Framework) คือ ชุดคำสั่ง เครื่องมือ โครงสร้าง ต้นแบบพื้นฐาน ที่ถูกสร้างมารองรับการทำงาน เพื่ออำนวยความสะดวกแก่ผู้ใช้งาน แทนที่จะสร้างเองก็มีเครื่องมือที่พร้อมใช้ ช่วยให้พัฒนาระบบได้เร็ว และง่ายขึ้น แต่ขนาดโปรแกรมจะมีขนาดใหญ่ ต้องศึกษาฟังก์ชัน และใช้คุณสมบัติได้เท่าที่มี อาทิ Laravel เป็น Web application framework ส่วน Angular และ React Native เป็น Framework แบบ Cross Platform Technology
พลตฟอร์ม (Platform) คือ การทํางานร่วมกันของฮาร์ดแวร์ หรือซอฟต์แวร์ อาจเป็นระบบปฏิบัติการ สถาปัตยกรรมคอมพิวเตอร์ เช่น ไมโครซอฟท์วินโดวส์ แมคโอเอสเอ็กซ์ หรือแอนดรอย ครอสแพลตฟอร์ม (Cross Platform) คือ การรองรับให้โปรแกรมคอมพิวเตอร์ ภาษาโปรแกรม ระบบปฏิบัติการ หรือ ซอฟต์แวร์ สามารถทำงานได้บนหลายแพลตฟอร์ม เช่น บนไมโครซอฟท์วินโดวส์ บนแมคโอเอสเอ็กซ์ บนลีนุกซ์ บนแอนดรอย และบนเพาเวอร์พีซี
Top 20 Front-end ได้แก่ 1) React Native 2) Framework7 3) Flutter 4) NativeScript 5) Meteor 6) JQuery 7) CocoaTouch 8) Xamarin 9) Swiftic 10) Ionic 11) Sencha Ext JS 12) Apache Cordova 13) Onsen UI 14) Corona SDK 15) Monaca 16) Mobile Angular UI 17) Appcelerator Titanium 18) Uno 19) Ktor 20) Aurelia Top 10 Web Frameworks ได้แก่ 1) Ruby on Rails (Ruby) 2) Laravel (PHP) 3) Django (Python) 4) ASP.NET (C#) 5) Express (JavaScript) 6) Spring (Java) 7) Angular (JavaScript) 8) Ember (JavaScript) 9) Meteor (JavaScript) 10) Vue (JavaScript)
การใช้ git clone หรือ git pull ต่างกันอย่างไร

คำสั่ง git clone .. และ git pull .. ต่างก็ทำให้ได้ Repository มาไว้ในเครื่อง Local ทั้งคู่ ต่างกันเพียงเล็กน้อยในเรื่องเงื่อนไขการได้มาของ Repository ทั้งชุด คือ 1) โหลดแฟ้มทั้งชุดใหม่เพราะไม่เคยมีในเครื่อง หากมีอยู่แล้วก็จะใช้คำสั่งนี้ไม่ได้ หรือ 2) โหลดมาแทนที่แฟ้มเก่าในเครื่อง หากไม่เคยมีอยู่ก่อนก็จะใช้คำสั่งนี้ไม่ได้ ต่อจากนี้ขอแสดงตัวอย่างคำสั่งด้านล่างให้สั้นและกระชับ จึงขอแทนที่ https:// git.heroku.com /test630313.git ด้วยคำว่า heroku.com/x.git


มีตัวอย่างการใช้คำสั่งที่ Heroku CLI Commands หรือดูรายการคำสั่งอีกมากมายที่ CLI Usage

DOS 1> git clone https://git.heroku.com/test630313.gif
หากว่าปัจจุบันอยู่ในห้อง D:/heroku แล้วใช้คำสั่ง dir ตรวจสอบรายชื่อแฟ้มใน Current Folder แล้ว ไม่พบห้องชื่อ test630313 ซึ่งเป็น application ที่เคยสร้างไว้ เราสามารถใช้ clone ดังตัวอย่างด้านบน จะทำให้สร้าง Folder ขึ้นมา และโหลดแฟ้มใน application มาไว้ใน Folder นี้ สรุปคือจะเกิด Folder ชื่อ D:/heroku/test630313
DOS 2> git pull https://git.heroku.com/test630313.gif
หากปัจจุบันอยู่ในห้อง D:/heroku/test630313 ซึ่งมีแฟ้มของ Application อยู่ทั้งชุดแล้ว และมีเพื่อนในทีมของเรา หรือตัวเราเองที่ใช้คอมพิวเตอร์เครื่องอื่นแก้ไข Code หรือต้องการตรวจสอบการ Update ก็จะใช้คำสั่ง pull ทำหน้าที่ดึงแฟ้มทั้งหมดจาก Server มาไว้ที่เครื่อง Local ที่เรากำลับใช้แบบตรวจสอบการ Update คือ การโหลดแฟ้มทั้งหมดจาก Heroku.com มาแทนที่แฟ้มเก่าในเครื่องของเรา ซึ่ง git pull จะคัดลอกจาก app ใน heroku ลงมา ใน current directory โดยไม่สร้าง folder ตามชื่อแอพแบบ git clone
DOS 3> heroku info หรือ heroku apps:info
แสดงข้อมูลของ Application เช่น Git URL , Web URL, Slug Size หรือ Owner เป็นการยืนยันว่าอยู่ถูกที่ ถูก Repository และเชื่อมต่ออยู่
DOS 4> echo ^<b^>Hello^</b^>>>index.php
เป็นการสั่งเพิ่มคำสั่ง echo เข้าไปอีก 1 บรรทัด ทำให้มีคำว่า Hello เพิ่มอีก 1 คำในโปรแกรมนี้ หรือเพิ่มอีกหลาย ๆ คำก็ได้ ด้วยคำสั่ง >> ซึ่งหมายถึงการสั่งเพิ่มข้อความต่อท้ายแฟ้มเดิม โดยเป้าหมาย คือ ทำให้แฟ้ม index.php นั้นได้รับการปรับปรุงอย่างใดอย่างหนึ่ง เมื่อแก้ไขแล้วก็สั่ง git add index.php และ git commit -m "change" แล้ว git push heroku master และ heroku open พบคำว่า Hello หลายคำ
DOS 5> heroku apps:destroy หรือ heroku destroy
การลบ หรือการทำลาย application ทำได้ทั้งบน heroku.com ผ่าน browser หรือบน CLI ตามคำสั่ง destroy แต่ป้องกันความผิดพลาดก็จะมีการถามยืนยันด้วยการให้พิมพ์ชื่อ application ที่ต้องการลบ หากพิมพ์ถูกก็จะทำลายได้สำเร็จ
DOS 6> heroku apps
คำสั่งนี้ ไม่จำเป็นต้องอยู่ใน Folder ของ Application ทำหน้าที่แสดง Application ที่เคยสร้างไว้ด้วยอีเมลปัจจุบันที่เคย Login หากสร้าง Apps ไว้แล้ว และไม่แน่ใจว่า Destroy ไปแล้วหรือไม่ ก็ตรวจสอบได้ด้วยคำสั่งนี้ ป้องกันปัญหาในการสร้างใหม่ โดยใช้ชื่อเดิม
heroku login เพื่อ push ผ่าน command line


ารใช้งาน heroku.com บน command line นั้น เริ่มต้นจากการสมัครสมาชิกบน heroku.com ให้เรียบร้อย ก็จะมี user และ password เป็นของตนเอง แต่เมื่อต้องการใช้งานโปรแกรม heroku บน command line ต้อง download โปรแกรมจาก devcenter.heroku.com หากต้องการใช้งาน เช่น ใช้คำสั่งแสดงรายการแอปพลิเคชันของเรา ด้วยคำสั่ง heroku apps ต้องเริ่มต้นด้วยคำสั่งเข้าระบบ คือ heroku login ซึ่งมีรายละเอียดการรักษาความปลอดภัยแบบ Two-factor authentication พบว่า ต้องมีการ Verify บัญชีผู้ใช้ และต้องเลือก method ในการยืนยันตัวตน พบว่า มี 3 ปุ่มปรากฎขึ้นมาให้เลือก 1) Salesforce Authenticator 2) One-Time Password Generator 3) Security Key โดยวิธีที่สาม จะเกี่ยวข้องกับการใช้ usb drive ที่น่าสนใจลดลงสำหรับการใช้งานในปัจจุบันที่บางอุปกรณ์ไม่มีช่อง usb แล้ว จึงเลือก 2 วิธีแรก และการใช้งาน ต้องไปดาวน์โหลด app จาก Google play store ชื่อ Salesforce Authenticator ไปติดตั้งบน mobile device เพื่อให้พร้อมสำหรับการยืนยันตัวตน ซึ่ง ขั้นตอนการยืนยันตัวตน มีดังนี้
1) บน PC : ติดตั้งโปรแกรม แล้วตรวจสอบรุ่นด้วย heroku -v แล้วสั่ง heroku login พบว่าจะมีการเปิด browser ให้ยืนยันตัวตน ซึ่งมี 3 method ให้เลือกดำเนิน ซึ่งผมเลือก 2 method แรก 2) บน PC : คลิ๊ก One-Time Password Generator จะพบกับ QR code มาให้ถูก scan ผ่าน application เฉพาะ จึงไม่สามารถ scan ด้วยโปรแกรมใด ๆ แล้วนำ code ไปเปิดบน browser เพราะไม่ใช่ web link 3) บน Mobile : ติดตั้ง Application ชื่อ Salesforce Authenticator บน Smart phone เปิดขึ้นมา แล้วเลือก เพิ่มบัญชี และสแกน QR code ที่พบบน PC จนผ่าน แล้วจะพบตัวเลข 6 หลัก สำหรับนำไปกรอกบน PC และจะเปลี่ยนเร็วมาก โปรดจดจำ แล้วไปกรอกในเวลาที่กำหนด 4) บน PC : คลิ๊ก Salesforce Authenticator พบช่องให้กรอกโค้ด ถ้ากรอกเลข 6 หลักในเวลาที่กำหนดแล้ว คลิ๊กปุ่ม Enable Two-factor Authentication 5) บน PC : ถ้ายืนยันตัวตนผ่าน ในหน้า Command line จะพบรายงานว่ายืนยันผ่านเรียบร้อย แล้วปรากฎรหัสผู้ใช้ขึ้นมา จากนั้นสามารถใช้ คำสั่ง heroku auth:whoami ตรวจสอบได้ว่าฉันคือใคร คำสั่ง heroku apps แสดงรายการแอปที่เคยสร้างไว้ คำสั่ง heroku apps:info react640909 แสดงรายละเอียดของแอปพลิเคชัน
thaiall.com/heroku/
thaiall.com/react/
heroku.com/articles/heroku-cli-commands
การส่ง joom.htm เข้า heroku
# การส่ง joom.htm เข้า heroku
- เตรียมแฟ้ม joom.htm เพื่อจะอัพโหลด
- ติดตั้ง heroku-x64.exe ขนาด 21.7 MB
เปิด https://devcenter.heroku.com/articles/heroku-cli
พบ https://cli-assets.heroku.com/heroku-x64.exe ติดตั้งใน c:\program files\heroku\bin
- d: , cd\ , mkdir heroku , cd heroku
- heroku -v (heroku/7.42.2 win32-x64 node-v12.16.2)
- git --version (git version 2.21.0.windows.1)
- git init (Initialized empty Git repository in D:/heroku/.git/)
- heroku login (กด enter ครั้งหนึ่งแล้วจะเรียก browser มาให้กรอกรหัสเข้าใช้)
- heroku: Press any key to open up the browser to login or q to exit:
---
# ใช้ heroku เค้าจำกัดที่ 5 apps
- heroku create joom2563 (เค้าจำกัด 5 apps และผมก็ใช้ครบแล้ว)
Creating ⬢ joom2563... !
 !    You've reached the limit of 5 apps for unverified accounts. Delete some
 !    apps or add a credit card to verify your account.
- heroku apps
=== xxx@hotmail.com Apps
ancient-hollows-03230
myapp630306
react630314
safe-hamlet-06492
thaiall63 (https://thaiall63.herokuapp.com/)
---
# ความแตกต่างของ git pull กับ git clone
- git pull https://git.heroku.com/thaiall63.git (เน้นอัพเดท ควรใช้ git clone ในครั้งแรก)
- เพราะ git pull จะไม่สร้าง folder และปรับค่าใน .git/config
- dir index.php หรือ type index.php ได้เลย (แต่จะไม่ได้รายละเอียดใน .git เมื่อต้องการสำหรับ push ขึ้นไป)
- git clone https://git.heroku.com/thaiall63.git (จะไม่ได้รายละเอียดใน .git สำหรับ push)
- การใช้ git clone สร้าง folder และมีรายละเอียดของ origin ใน .git/config สำหรับการ push
[remote "origin"]
        url = https://git.heroku.com/thaiall63.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
---
# สำรวจ และเตรียมแฟ้ม
- cd thaiall63, dir index.php 
- เตรียมแฟ้ม joom.htm มาไว้ในห้องนี้ ด้วยการไปคัดลอกมาวาง
- ส่องดูแอพตัวเองว่ามีพื้นที่ว่างสำหรับ joom.htm หรือไม่ ด้วย heroku info thaiall63
=== thaiall63
Auto Cert Mgmt: false
Dynos:          web: 1
Git URL:        https://git.heroku.com/thaiall63.git
Owner:          thaiall@hotmail.com
Region:         us
Repo Size:      1 KB
Slug Size:      14 MB
Stack:          heroku-18
Web URL:        https://thaiall63.herokuapp.com/
---
# สั่ง push
- git add joom.htm และ joom100.htm
- git config --global user.email "thaiall@hotmail.com"
- git config --global user.name "burin"
- git commit -m "joom page v1"
 2 files changed, 348 insertions(+)
 create mode 100644 joom.htm
 create mode 100644 joom100.htm
- git config -l
- git push origin master
- https://thaiall63.herokuapp.com/joom.htm
การส่ง joom.htm เข้า heroku (หลังปรับปรุง)
#	เมื่อปรับปรุงแฟ้ม joom.htm และจะอัพโหลดเข้า hiroku.com
- git add joom.htm 
- git commit -m "joom page v2"
- git push origin master
- https://thaiall63.herokuapp.com/joom.htm
บันทึกย่อ
https://techcrunch.com/2010/12/08/breaking-salesforce-buys-heroku-for-212-million-in-cash/
https://en.wikipedia.org/wiki/Heroku
http://myapp630306.herokuapp.com (wordpress / postgresqlworking.php)
http://ancient-hollows-032330.herokuapp.com/ (no such app)
http://safe-hamlet-06492.herokuapp.com/p10.php (print 1 to 10)
http://thaiall63.herokuapp.com (phpinfo)

Platform as a service (PaaS)
https://thaiall63.herokuapp.com/
https://safe-hamlet-06492.herokuapp.com/

Download heroku-x64.exe แล้วติดตั้ง
cmd
heroku login
เปิด browser แล้ว login ก็จะได้สถานะว่า logged in as [your email]
php -v
PHP 7.0.5 (cli) (built: Apr 26 2016 04:39:48) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
Now check that you have composer installed. If not, install it and test again:
composer -V
Composer version 1.4.1 2017-03-10 09:29:45
Now check that you have git installed. If not, install it and test again.
git --version
git version 2.12.2

https://www.apachefriends.org/download.html
https://getcomposer.org/Composer-Setup.exe
ค้น Edit the system environment variables 
เพิ่ม c:\xampp7\php และ c:\composer
เข้า DOS พิมพ์ set ดูได้
composer -v
php -v
git --version
d:
mkdir heroku
cd heroku
git clone https://github.com/thaiall/mytest.git
cd mytest
heroku create
git push heroku master
heroku ps:scale web=1
heroku open
https://safe-hamlet-06492.herokuapp.com/
View logs 
heroku logs --tail
ctrl-c
heroku ps
notepad composer.json
{
  "require" : {
    "silex/silex": "^2.0.4",
    "monolog/monolog": "^1.22",
    "twig/twig": "^2.0",
    "symfony/twig-bridge": "^3"
  },
  "require-dev": {
    "heroku/heroku-buildpack-php": "*"
  }
}
composer update
git add .
git config --global user.email "thaiall@hotmail.com"
git config --global user.name "burin"
git commit -m "Demo"
git push heroku master
heroku open index.files
heroku run "php -a"
echo PHP_VERSION;
quit
heroku run bash
ls
exit

heroku run bash

---
http://www.thaiall.com/git/
d:
cd heroku
cd thaiall63
git clone https://git.heroku.com/thaiall63.git
พบ thaiall63/thaiall63 ตอนนี้ว่างเปล่า
สร้าง index.php มี phpinfo()
cd thaiall63 ในห้องที่มี .git
git add .
git config --global user.email "thaiall@hotmail.com"
git config --global user.name "burin"
git commit -m "hello"
git push origin master
https://thaiall63.herokuapp.com/
--------------------
Heroku git URL https://git.heroku.com/safe-hamlet-06492.git
https://safe-hamlet-06492.herokuapp.com/
D:\heroku>mkdir hamlet
D:\heroku>cd hamlet
D:\heroku\hamlet>git clone https://git.heroku.com/safe-hamlet-06492.git
D:\heroku\hamlet>cd safe-hamlet-06492
D:\heroku\hamlet\safe-hamlet-06492>echo ^<?php for($i=1;$i^<=10;$i++){ echo $i; } ?^> > p10.php
D:\heroku\hamlet\safe-hamlet-06492>type p10.php
D:\heroku\hamlet\safe-hamlet-06492>git add p10.php
D:\heroku\hamlet\safe-hamlet-06492>git config --global user.email "thaiall@hotmail.com"
D:\heroku\hamlet\safe-hamlet-06492>git config --global user.name "burin"
D:\heroku\hamlet\safe-hamlet-06492>git commit -m "hello"
D:\heroku\hamlet\safe-hamlet-06492>git push origin master
https://safe-hamlet-06492.herokuapp.com/p10.php
------
ดูใน view logs พบ error
[04-Mar-2020 04:50:20 UTC] PHP Parse error:  syntax error, unexpected '$i' (T_VARIABLE) in /app/p10.php on line 1
https://dashboard.heroku.com/apps/safe-hamlet-06492/logs
D:\heroku\hamlet\safe-hamlet-06492>echo ^<?php for($i=1;$i^<=10;$i++){ echo $i; } ?^> > p10.php
D:\heroku\hamlet\safe-hamlet-06492>type p10.php
D:\heroku\hamlet\safe-hamlet-06492>git add p10.php
D:\heroku\hamlet\safe-hamlet-06492>git config --global user.email "thaiall@hotmail.com"
D:\heroku\hamlet\safe-hamlet-06492>git config --global user.name "burin"
D:\heroku\hamlet\safe-hamlet-06492>git commit -m "hello"
D:\heroku\hamlet\safe-hamlet-06492>git push origin master
D:\heroku\hamlet\safe-hamlet-06492>explorer https://safe-hamlet-06492.herokuapp.com/p10.php

บริการ Heroku Postgres
Create one
Install Heroku Postgres
$heroku addons:create heroku-postgresql:hobby-dev
เลือก ancient-hollows-03230 ที่ยังไม่ระบุ framework
คลิ๊ก Provision add-on
ใต้ Resources ของ ancient-hollows-03230 จะพบ Heroku Postgres
ดูสถานของฐานข้อมูล https://data.heroku.com/datastores/d3d0cf8f-b5de-4371-93a3-9301c31841e5
https://git.heroku.com/ancient-hollows-03230.git
C:\users\lab>d:
D:\>cd heroku
D:\heroku>mkdir ancient
D:\heroku>cd ancient
D:\heroku\ancient>git clone https://git.heroku.com/ancient-hollows-03230.git
Cloning into 'ancient-hollows-03230'...
warning: You appear to have cloned an empty repository.
D:\heroku\ancient>cd ancient-hollows-03230
D:\heroku\ancient\ancient-hollows-03230>notepad composer.json
{
  "require-dev": {
    "heroku/heroku-buildpack-php": "*"
  }
}
composer update
D:\heroku\ancient\ancient-hollows-03230>echo ^<?php for($i=1;$i^<=10;$i++){ echo $i; } ?^> > p10.php
D:\heroku\ancient\ancient-hollows-03230>git add p10.php
D:\heroku\ancient\ancient-hollows-03230>git commit -m "hello"
[master (root-commit) e548a61] hello
 1 file changed, 1 insertion(+)
 create mode 100644 p10.php
D:\heroku\ancient\ancient-hollows-03230>git push origin master
'push' is not recognized as an internal or external command,
operable program or batch file.
D:\heroku\ancient\ancient-hollows-03230>git push origin master
!     No default language could be detected for this app.
---
D:\heroku\ancient\ancient-hollows-03230>heroku buildpacks
D:\heroku\ancient\ancient-hollows-03230>heroku buildpacks:set heroku/php
D:\heroku\ancient\ancient-hollows-03230>heroku create ancient-hollows-03230 --buildpack heroku/php
Buildpack set. Next release on ancient-hollows-03230 will use heroku/php.
Run git push heroku master to create a new release using this buildpack.
---
heroku create myapp630306 --buildpack heroku/php
git clone https://git.heroku.com/myapp630306.git
cd myapp630306
echo ^<?php for($i=1;$i^<=10;$i++){ echo $i; } ?^> > p10.php // index.php
git add p10.php
git config --global user.email "thaiall@hotmail.com"
git config --global user.name "burin"
git commit -m "Demo"
git push origin master
---
https://myapp630306.herokuapp.com/
https://devcenter.heroku.com/articles/heroku-postgresql#connecting-in-php
<?php
$db = parse_url(getenv("DATABASE_URL"));
echo $db["host"]. __LINE__;
$pdo = new PDO("pgsql:" . sprintf(
    "host=%s;port=%s;user=%s;password=%s;dbname=%s",
    $db["host"],
    $db["port"],
    $db["user"],
    $db["pass"],
    ltrim($db["path"], "/")
));
?>
---
Cloud Application Platform
heroku git:clone -a APP-NAME
heroku slugs:download -a APP_NAME
---
heroku login
launch browser to login http://www.heroku.com
https://devcenter.heroku.com/articles/heroku-cli
Download heroku-x64.exe แล้วติดตั้ง
git clone https://git.heroku.com/myapp630306.git
cd myapp630306
notepad index.php
git add index.php
git config --global user.email "thaiall@hotmail.com"
git config --global user.name "burin"
git commit -m "Demo"
git push origin master
การติดตั้ง app
ใช้ composer ติดตั้ง monolog ผ่าน composer.json
พบ 3 folder ใน vendor เมื่อ git add vendor พบแฟ้ม 125 files ถูกเพิ่ม
git clone https://git.heroku.com/myapp630306.git
คัดลอก testmonolog.php และ /vendor มาไว้ใน D:\heroku\myapp6303066
git add testmonolog.php
git add vendor
git commit -m "Demo"
git push origin master
https://myapp630306.herokuapp.com/testmonolog.php
https://myapp630306.herokuapp.com/mytest.log
ตอบคำถาม wordpress 
https://help.heroku.com/58GWW5CQ/can-i-use-wordpress-on-heroku
http://heroku-wordpress-postgresql.herokuapp.com/
---
D:\heroku>git clone https://git.heroku.com/myapp630306.git
D:\heroku>cd myapp630306
D:\heroku\myapp630306>cd myapp630306
git clone git://github.com/technomile/Heroku-WordPress-PostgreSQL.git
https://github.com/mhoofman/wordpress-heroku
---
Wordpress
https://github.com/mhoofman/wordpress-heroku
https://www.youtube.com/watch?v=d4EndQrrcPA
D:\heroku>heroku login
D:\heroku>git clone git://github.com/mhoofman/wordpress-heroku.git
D:\heroku>cd wordpress-heroku
D:\heroku\wordpress-heroku>heroku create
D:\heroku\wordpress-heroku>heroku pg:promote postgresql-contoured-88069
D:\heroku\wordpress-heroku>git add .
D:\heroku\wordpress-heroku>git commit -m "wp"
D:\heroku\wordpress-heroku>git push origin master
https://myapp630306.herokuapp.com
<?php
$db = parse_url(getenv("DATABASE_URL"));
$connect = new PDO("pgsql:" . sprintf("host=%s;port=%s;user=%s;password=%s;dbname=%s",$db["host"],$db["port"],$db["user"],$db["pass"],ltrim($db["path"], "/")));
$query = "select table_name from information_schema.tables"; 
$result = $connect->query($query);
if (!$result) { echo "Finding : error $query"; exit;}
$rows = $result->fetchAll(PDO::FETCH_OBJ); // $num_rows = count($rows);
foreach ($rows as $object) {
  // echo $object->table_name;
  foreach ($object as $o) echo "- $o <br/>";
}
// if(isset($_GET["thaiall"])) $result = $connect->query("drop table ". $_GET["thaiall"]);
?>
$ git rm wp*.*
$ git rm wp-content
https://medium.com/@shoaibhassan_/install-wordpress-with-postgresql-using-apache-in-5-min-a26078d496fb
https://github.com/php4dev/heroku-wordpress
$ git checkout -b production
$ heroku addons:create sendgrid:starter (need credit card)
$ git push origin production:master
$ git pull 
Using the same branch name from our installation:
$ git checkout production
$ git merge master # Merge latest
$ git push origin production:master
.gitignore
*.log
*.backup
*.save
wp_config.php
wp-content/advanced-cache.php
wp-content/backup-db/
wp-content/backups/
wp-content/blogs.dir/
wp-content/cache/
wp-content/upgrade/
wp-content/wp-cache-config.php
wp-content/plugins/hello.php

/.htaccess
/license.txt
/readme.html
/sitemap.xml
/sitemap.xml.gz
ติดตั้ง wordpress

ารติดตั้ง CMSBuildpack by TechnoMile เป็นเรื่องง่าย มีปุ่มให้กด Deploy to Heroku แต่ขั้นตอนนั้นไปติดตรงที่แบบฟอร์มเค้า required คือ AWS_ACCESS_KEY_ID กับ AWS_SECRET_ACCESS_KEY จากนั้นก็จะมีหน้าต่างปรากฎให้กรอกข้อมูลบัตรเครดิต ซึ่งเป็น payment information to verify your account ส่วนจ่ายเท่าไร ยังไม่ได้แจ้งไว้ ณ ที่นี้ แต่ถ้าไม่มีรหัสบัตรเครดิตก็ไม่ได้ไปต่อ ผมเองก็ไม่ไปต่อครับ หาช่องทางอื่นดีกว่า .. เล่าสู่กันฟัง
https://elements.heroku.com/buttons/technomile/heroku-wordpress-postgresql