Sử dụng Heroku Connect kết hợp với Flask và Psycopg2
This post hasn't been updated for 7 years
1. Tổng quan
Heroku Connect có thể dễ dàng build Heroku apps share data với hệ thống Saleforce của bạn. Ở trong bài viết này, mình sẽ giới thiệu cho bạn cách chạy một Python app với Psycopg2 trong Heroku. Với Heroku Connect bạn có thế sync dữ liệu giữa PostgreSQL và Saleforce. Psycopg là một trong những Postgres adapter library của Python dùng phổ biến. Psycopg2 là một DB API 2.0 phù hợp với PostgreSQL driver.
2. Tạo app
2.1 Yêu cầu
- Cài đặt Python: http://python.org/
- Cài đặt Heroku Toolbelt : https://toolbelt.heroku.com/
- Tạo một tài khoản Heroku: https://signup.heroku.com
- Tạo một tài khoản Saleforce: https://www.salesforce.com/
2.2 Các bước thực hiện
2.2.1 Tạo môi trường ảo Python
Ở đây mình sẽ dụng Virtualenv để tạo môi trường này:
$ mkdir flask-psycopg2-sample
$ cd flask-psycopg2-sample
$ virtualenv -p python2 venv
$ source venv/bin/activate
$ mkdir src && cd src
Sau bước này, mình đã tạo một môi trường ảo sử dụng Python 2 tên là venv
. Đồng thời, mình cũng tạo thư mục gốc source code là src
.
2.2.2 Cài đặt các gói cần thiết
Ở bước này, mình sẽ cài các gói: flask
, gunicorn
, psycopg2
. Sau đó mình export các lib và version các lib ra một file requirements.txt
.
$ pip install flask gunicorn psycopg2
$ pip freeze > requirements.txt
2.2.3 Code app
Cấu trúc project:
venv
src.
├── app.py
├── Procfile
├── requirements.txt
└── templates
└── contacts.html
- Tạo Flask app
app.py
:
import os
import psycopg2
from flask import Flask, render_template
import urlparse
url = urlparse.urlparse(os.environ.get('DATABASE_URL'))
db = "dbname=%s user=%s password=%s host=%s " % (
url.path[1:], url.username, url.password, url.hostname)
schema = "schema.sql"
conn = psycopg2.connect(db)
cur = conn.cursor()
app = Flask(__name__, template_folder='templates')
@app.route('/')
def hello():
return 'Hello World!'
@app.route('/contacts')
def contacts():
try:
cur.execute("""SELECT name from salesforce.contact""")
rows = cur.fetchall()
my_list = []
for row in rows:
my_list.append(row[0])
return render_template('contacts.html', results=my_list)
except Exception as e:
print(e)
return
if __name__ == '__main__':
app.run(host='0.0.0.0')
- Tạo file
Procfile
cấu hình app chạy trên Heroku cloud:
web: gunicorn app:app --log-file=-
- File
requirements.txt
:
click==6.6
Flask==0.12
gunicorn==19.6.0
itsdangerous==0.24
Jinja2==2.8.1
MarkupSafe==0.23
psycopg2==2.6.2
Werkzeug==0.11.15
- Tạo file
contacts.html
view:
<html>
<head>
<title>Flask Template Example</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" media="screen">
<style type="text/css">
.container {
max-width: 500px;
padding-top: 100px;
}
</style>
</head>
<body>
<div class="container">
<p>Contacts:</p>
<ul>
{% for r in results %}
<li>{{r}}</li>
{% endfor %}
</ul>
</div>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js">
</script>
</body>
</html>
3. Deploy
Deploy lên Heroku có nhiều lựa chọn, ở đây mình chọn bộ CLI mà Heroku cung cấp.
3.1 Initialize git
$ git init
$ git add .
$ git commit -m "Add Flask Heroku Saleforce app"
3.1 Deploy
$ heroku create --app demo-fhs
$ git push heroku master
3.2 Add PostgreSQL Add-On
Sử dụng CLI để tạo add thêm Add-On PostgreSQL(https://devcenter.heroku.com/articles/heroku-postgresql):
$ heroku addons:create heroku-postgresql:hobby-dev
4. Cấu hình trong Heroku Dashboard
- Click vào
Setup Connection
button:
- Nhập Schema Name. Mặc định sẽ là
salesforce
Trigger OAuth
bằng cách click vào buttonAuthorize
:
- Sau đó, nhập Salesforce.com developer account
- Tạo
Mappings
- Tạo
Mappings Contacts
: Chọn các fields trongSalesforce Schema
mà bạn cần map tớiPostgres
database trong app.
- Load dữ liệu trên App Python Flask ta sẽ có kết quả:
Chúc bạn thành công!
All Rights Reserved