6

Flaskを使用してアプリケーションを開発しています。

debug=Trueメインの関数呼び出しに追加および削除するための迅速で自動化された方法が必要です。

発達:

app.run(debug=True)

製造:

app.run()

セキュリティ上の理由から、デバッグモードを「実際に」オンのままにすると、アプリに関する個人情報や機密情報が公開される可能性があります。

sedまたはawkを使用してこれをgitフックで自動化することを考えていました(本番バージョンはプッシュ先の裸のリモートリポジトリに保持されます)、またはuwsgiやその他を起動するために作成するシェルスクリプトに含めることを考えていました「メンテナンス」-アプリを適切に提供できるようにするタスク。

どう思いますか?

4

5 に答える 5

12

それは行く方法ではありません!私の推奨事項は、config.py次のようなコンテンツを含む構成Pythonモジュール(たとえば)を作成することです。

DEBUG = True

さて、現在のコードで、これを書いてください:

import config
app.run(debug=config.DEBUG)

これで、本番環境で実行する場合は、DEBUGからTrueに変更するだけFalseです。または、このファイルをバージョン管理せずに残すことができるため、開発のコピーは本番のコピーとは異なります。たとえば、開発と本番の両方で同じデータベース接続パラメータを使用しないため、これは珍しいことではありません。

自動的に更新したい場合でも、-iフラグを付けて設定ファイルでsedを呼び出すだけです。この1つのファイルだけを更新する方がはるかに安全です。

$ sed -i.bkp 's/^ *DEBUG *=.*$/DEBUG = False/' config.py
于 2012-06-06T13:34:05.037 に答える
5

サーバーに環境変数を設定する必要があります。スクリプトはこの変数の存在を検出し、デバッグを無効にすることができます。

于 2012-06-06T13:34:19.953 に答える
4

私は使用しますsed

sed 's/debug=True//'

ポータブル、スクリプト可能、ユビキタス。

于 2012-06-06T13:33:41.837 に答える
4

おそらく本番環境で使用するべきではありませんapp.runuwsgi を使用している場合は絶対に必要ありません)。代わりに、 Flask の優れたドキュメントの配置セクションで説明されているいくつかの配置オプションのいずれかを使用してください。(単に、Python に含まれているサーバーを実行する呼び出しを行います。)app.runwerkzeug.serving.run_simplewsgiref

そうは言っても、これを行う正しい方法は、ソースコードのデプロイ後の編集ではなく、@brandizzi が彼の回答で指摘したように、設定を変更するサーバー固有の構成ファイルを使用することです。

これはいくつかの異なる方法で行うことができます (Flask にはこれに関するドキュメントもあります-ファイルからの構成開発と運用の切り替えに関する Armin の提案を参照してください)。

  1. 開発とサーバーの構成の両方をリポジトリに含めます。それらを切り替えるには、環境変数を使用します。

    # your_app.config.develop
    DEBUG = True
    
    # your_app.config.production
    DEBUG = False
    
    # your_app.app
    from flask import Flask
    from os import environ
    
    mode = environ.get("YOURAPP_MODE")
    mode = "production" if mode is None else "develop"
    
    config = __import__("your_app.config." + mode)
    
    app = Flask("your_app")
    app.config.from_object(config)
    
  2. 実稼働構成を、必要になる可能性があるその他のサーバー固有の構成と共に別のリポジトリに保存します。環境変数が設定されている場合は、構成をロードします。

于 2012-06-07T06:30:21.160 に答える
3

NOCOMMIT フックを使用することもできます ( gittyから):

これを pre-commit フックとして設定します

if git diff --cached | grep NOCOMMIT > /dev/null; then
echo "You tried to commit a line containing NOCOMMIT"
  exit 1
fi
exit 0

が含まれている場合、これによりコミットが防止されますNOCOMMIT

NOCOMMITもちろん、Debug=Trueフック内で直接置き換えることもできます。

于 2012-06-06T13:51:16.787 に答える