簡體   English   中英

部署后是否可以在不重新運行flask服務器的情況下更改flask的代碼?

[英]Is it possible to change code of flask without rerunning the flask server after deployment?

考慮一下,我部署了一個可路由到多個網頁的 Flask 服務器。 如果我想更改一條路由的內容,通過更改其代碼,是否可以在不重新運行 Flask 服務器的情況下在網頁中反映這些更改? 只要網站 url(端口號和路由)不改變,就可以在 linux 服務器上托管和重新運行其他腳本,或者在另一個燒瓶服務器上運行。

請提出任何你能想到的方法!

設置燒瓶環境會在 shell 中為你做這件事。

export FLASK_ENV=development

假設您使用的是 Flask 開發服務器,

是的,可以使用use_reloader=True

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    # You business logic code
    return some_data

if __name__ == '__main__':
    app.run(debug=False, host='0.0.0.0', port=8000,
            use_reloader=True, threaded=True)


然而,在生產中使用它並不是一個好主意,相關的 與 Flask 捆綁在一起的服務器在生產中使用是否安全?

我的假設是您希望您的部署服務能夠識別文件中發生了更改,這會提示它自動重新啟動以反映更改,而不是您手動重新啟動該服務。

假設您正在部署在生產 uWSGI 服務器上,使用touch-reload=/path/to/folder啟動服務將允許 uWSGI 在指定的文件/文件夾被修改或觸摸時重新加載。 https://uwsgi-docs.readthedocs.io/en/latest/Options.html#touch-reload

--touch-reload=/path/to/file.txt

我認為您只能使用 Apache Webserver 來做到這一點。 請參閱Flask 文檔 我還沒有嘗試過(還沒有),但是當您部署了新代碼時,wsgi 文件中的任何小更改都應該自動重新加載代碼。

你提到了兩個要求

  1. 我部署了一個 Flask 服務器,我假設您的意思是它部署在生產環境中。 這會自動從開發服務器中排除調試模式,因為它對於生產使用來說不穩定、高效或安全
  2. 無需重新運行 Flask 服務器 這排除了自動重新加載,因為這將完全重新啟動您的服務器。 在服務器再次准備好之前進入的任何請求都將失敗。

要去了解的一種方式是通過運行與調試模式下您的應用程序打開app.run(debug=True)

這種方法的問題在於,您的應用程序將通過 Internet 公開,而應用程序的內部調試器不應在其上執行。

我能想到的一個更好的方法是從一個不同的文件中調用你需要經常更改的函數,而不是你的核心燒瓶代碼所在的位置,並在需要時在該文件中進行更改。 這樣您就不需要更改 Flask 代碼,也不需要重新啟動應用程序


編輯:

一個示例 Flask 路線是

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    # Route's business logic usually goes here
    return data

現在,您不必在與路由相同的文件中編寫應用程序的業務邏輯,而是可以簡單地將其編寫在不同的文件中,如下所示,並將其導入到包含路由的文件中:

包含業務邏輯的文件

def process_hello_world(params):
    # Write your business logic here which you want to change without reloading the application
    return data

並在帶有路由的應用程序文件中調用業務邏輯,如下所示:

from flask import Flask
from 
app = Flask(__name__)

@app.route('/')
def hello_world():
    data = process_hello_world()
    return data

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM