テストおよび展開環境の特定の設定をより適切に制御するために Fabric の使用を開始したばかりであり、構成を交換するための最良の方法を見つけようとしています。
アプリケーションに、デフォルトで単純なデータベース接続と認証用のいくつかの定数を定義するモジュールがあるとします。
host = 'db.host.com'
user = 'someuser'
passw = 'somepass'
db = 'somedb'
class DB():
def __init__(self,host=host,user=user,passw=passw,db=db,cursor='DictCursor'):
#make a database connection here and all that jazz
ファブリックを見つける前にgetfqdn()
、ライブラリの関数を使用しsocket
て、システムがプッシュされているホストのドメイン名を確認し、認証資格情報を条件付けしていました。
if getfqdn() == 'test.somedomain.com':
host = 'db.host.com'
user = 'someuser'
passw = 'somepass'
db = 'somedb'
elif getfqdn() == 'test.someotherdomain.com':
host = 'db.other.com'
user = 'otherguy'
passw = 'otherpass'
db = 'somedb'
明らかな理由から、これは実際にはそれほど素晴らしいことではありません。私が知りたいのは、プロジェクトが特定のテスト/展開サーバーにプッシュされると、これらの値がプッシュ後に変更されるように、Fabric でこのようなものを適応させる最もスマートな方法は何かということです。
ドキュメントを見るだけで、いくつかのアプローチを考えることができます。Fabric がデプロイメントの内容に基づいてシェル コマンドを使用して出力できる定数を定義するだけのファイルを作成し、データベース ハンドラーを定義するファイルでそれらをインポートできるようにする必要がありますか? open
このようにwrite
fabfile 内から実行するのは理にかなっていますか? .gitignore
これらの種類のファイルもリポジトリにコミットされず、ファブリックに依存してデプロイされないようにする必要があると思いました。
getfqdn
現在使用している構成設定を交換するか、手動で調整しているすべての構成設定に最適なアプローチを適用する予定です。ありがとう!