我正在開發燒瓶微服務以暴露cassandra數據庫中的一些數據。從命令行調用gunicorn。問題在於,我對於在何處以及如何連接數據庫感到困惑,尤其是在進行單元測試時考慮如何模擬或繞過數據庫的需求。燒瓶post-fork連接到cassandra
我第一次嘗試是在創建應用程序時連接如下
def create_app():
app = Flask(__name__)
app.debug = True
cluster = Cluster([os.environ['CASSANDRA_HOST']])
app.cassandra = cluster.connect(os.environ['CASSANDRA_KEYSPACE'])
return app
認爲它會讓每個單獨的請求一個「全球性」連接減少開銷。這顯然不能通過單元測試,因爲它會嘗試連接,這不是CI管道隔離環境中單元測試的要點。
然後,從卡桑德拉人檢查一些slides它說燒瓶使用@app.before_first_request
,並作爲連接「後叉」的一般規則。我不確定在這種情況下後叉的含義。
總之,做
@app.before_first_request
def before_request():
app.cluster = Cluster([os.environ['CASSANDRA_HOST']])
app.cassandra = app.cluster.connect(os.environ['CASSANDRA_KEYSPACE'])
也可以,但是仍然有孤立的單元測試同樣的問題。
通過閱讀這個post,我想我沒有連接本身的問題,因爲我正在創建一個由gunicorn(post-fork)產生的每個瓶子實例的cassandra會話。
然後,我的問題將減少能夠單元測試端點而不必明確達到數據庫的策略。