本文將示範如何把《超圖解Python程式設計入門》第12章的留言板資料庫網站佈署到Heroku。Heroku網站提供的資料庫系統是開放原始碼的PostgreSQL(簡稱Postgres),啟用此資料庫系統的步驟如下:
1. 登入Heroku網站,點擊你要佈署留言板的應用程式名稱:
2. 點擊Resources(資源),在底下的Add-ons(外掛)搜尋欄位,輸入關鍵字 “postgres”,可以找到Heroku Postgres;按下Enter鍵。
3. 底下畫面提示將在bbs應用程式附加Heroku Postgres資料庫服務,方案選擇“Hobby Dev – Free”(免費),按下“Provision”(供應):
4. 點擊剛才新增的資料庫服務名稱,可查看相關設定資料。
5. 切換到資料庫服務的Settings(設置)畫面,點擊“View Credentials”(檢視憑證):
即可看到資料庫主機(Host)、資料庫名稱(Database)、使用者名稱(User)、埠號(Port)和密碼(Password):
其中最重要的是URI(資源位址),它由底下的格式組成:
postgres://使用者:密碼@主機:埠號/資料庫
請複製此URI備用。
修改資料庫連線位址與資料表欄位
開啟guestbook.py檔,把原本連線到SQLite資料庫位址的敘述(第12行):
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///bbs.db'
改成之前複製的PostgreSQL位址:
app.config['SQLALCHEMY_DATABASE_URI'] = ' postgres://○○○○○○'
使用者資料表(User)的加密密碼欄位(pwd_hash),原本的長度設定成80字元,請改成100字元:
pwd_hash = db.Column(db.String(100), nullable=False)
修改requirements.txt
改用PostgreSQL之後,需要額外安裝此資料庫的驅動程式“psycopg2”,請在src資料夾加入底下內容的requirements.txt檔:
gunicorn SQLAlchemy==1.3.11 Flask==1.1.1 Flask-Login==0.4.1 Flask-SQLAlchemy==2.4.1 psycopg2==2.8.4 python-dateutil==2.8.1
Flask留言板程式的src資料夾包含這些檔案:
建立與初始化資料表
透過git和Heroku CLI命令上傳src資料夾的全部檔案到Heroku空間之後,繼續在終端機執行heroku run python,啟動遠端(Heroku應用程式空間)的Python直譯器:
參閱12-16頁,執行db.create_all()敘述建立資料表,只不過,這個資料表是建立在雲端的PostgreSQL資料庫,而非本機的SQLite。建立資料表之後,即可輸入一些資料,最後記得輸入exit()退出遠端的Python直譯器:
資料表建立完畢了,執行heroku open命令開啟瀏覽器就能看到你的線上留言板了!