วันพุธที่ 23 มีนาคม พ.ศ. 2559

Heroku with Python 3 !!

โดยปกติทั่วไป เมื่อ Deploy ขึ้น Heroku แล้ว version ของ Python จะเป็น Python 2.7.11

แต่ถ้าหากเราต้องการจะเปลี่ยนเป็น Python 3 สามารถทำได้

โดยการสร้างไฟล์ชื่อ runtime.txt ขึ้นใน root directory ของ project

และใส่ version ที่ต้องการจะใช้ไป เช่น python-3.5.1 ก็จะเป็นการใช้ Python 3.5.11 ใน App ของเรา

รายละเอียดเพิ่มเติม https://devcenter.heroku.com/articles/python-runtimes

วันอาทิตย์ที่ 20 มีนาคม พ.ศ. 2559

Deploy Web App to Heroku

สมัคร Heroku account

https://www.heroku.com/

ลง Virtualenv


$ sudo pip install virtualenv
 
ลง Postgres
 
$ sudo apt-get install postgresql postgresql-contrib 

สร้าง user account Postgres

$ sudo -u postgres createuser --superuser $USER
$ sudo -u postgres createdb $USER

cd ไปที่ /home

$ touch .psql_history
 
ลง Heroku Toolbelt
 
$ wget -O- https://toolbelt.heroku.com/install-ubuntu.sh | sh   
 
ทำการเริ่ม Deploy App ลง Heroku
 
สร้างไฟล์ชื่อ requirements.txt ใน directory project
ใส่ข้อความบอกว่าต้องการโปรแกรมอะไรบ้าง
 
dj-database-url==0.4.0
Django==1.9.2
gunicorn==19.4.5
psycopg2==2.6.1
whitenoise==2.0.6
 
สร้าง virtual env ลงใน directory project
 
$ virtualenv venv
 
จากนั้นเปิดใช้งาน virtualenv
 
$ source venv/bin/activate
 
สร้าง Procfile ขึ้นมา
 ใส่ข้อความว่า web: gunicorn ชื่อโปรเจค.wsgi --log-file -
เช่น web: gunicorn wordbankwebsite.wsgi --log-file - 
 
ทำการลง psycopg2
$ sudo apt-get install libpq-dev && sudo apt-get install python3-dev
 
ติดตั้งไฟล์ที่จำเป็นในการรัน app ใน requirements.txt
 
$ sudo pip3 install -r requirements.txt
 
ลองรันในเครื่องตัวเอง
 $ heroku local web
 
ตั้งค่า static files
 
ไป directory project
 
เปิด setting.py 
ใส่ import dj_database_urlว้ด้านบนของไฟล์
เลื่อนลงมาล่างสุด
ลบ
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
STATIC_URL = '/static/'
ใส่
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'  
 
สร้าง folder static ใน directory project
ใส่ไฟล์อะไรก็ได้ใน folder
 
จากนั้นทำการ collect static
python manage.py collectstatic
 
เปิดไฟล์ wsgi.py
ใส่ from whitenoise.django import DjangoWhiteNoise ว้ด้านบน
ใส่ application = DjangoWhiteNoise(application) ไว้ด้านล่าง   
 
จะเริ่ม deploy
 
สร้าง gitignore
กลับมา root dir ของโปรเจค
$  gedit .gitignore
ใส่ข้อความ
venv
*.pyc
staticfiles
.env 

จากนั้น commit
 
แล้วสร้าง app ใน heroku
$ heroku create
 
แล้ว push project ขึ้น heroku

เสร็จสิ้นเรียบร้อย

https://wordbank5720144.herokuapp.com/

ปัญหาจากการ Deploy ขึ้น Heroku

เมื่อใช้คำสั่ง sudo apt-get install จะขึ้นแบบนี้เสมอ


วิธีแก้ไขคือ ลง Ubuntu ใหม่