生地-いくつかのレシピ

今日、私は突然スクリプトが強力であることを認識しました( ファブリックを数か月使用した後)。 実際、適切なスクリプトの作成に30分を費やすことで、不必要なアクションを繰り返し何時間も繰り返す必要がなくなります。 Pythonの支持者の生活を簡素化するために、 fabricのような素晴らしいモジュールがあります 。 そして、開発者の生活を簡素化する例として、 fabファイルのいくつかの部分を共有したいと思います。



これらは関数になります: ローカルファイルのスマートコメンターとgitコミッター。



まず第一に、生地を入れて、その後、どこにでもそれを置きます(突然、あなたがまだそれをしないならば)!



pip install fabric
      
      





コミッター



超自然的なものはありません-便利なレシピ:

 # -*- coding: utf-8 -*- from fabric.api import local, prompt, settings env.test_branch = 'test' env.dev_branch = 'dev' def commit(): """  . """ with settings(warn_only=True): local('git status') prompt('Press <Enter> to continue or <Ctrl+C> to cancel.') #    , #         local('git add .') local('git commit') #         def merge_dev_to_test(with_return=True): """       . """ local('git checkout %s' % env.test_branch) #     local('git merge --no-ff %s' % env.dev_branch) #     if with_return: local('git checkout %s' % env.dev_branch) #    def to_test() """     . """ commit() merge_dev_to_test()
      
      







merge_dev_to_test



関数merge_dev_to_test



非常に適用されており、簡単にユニバーサル化できます。



実際、このスクリプトは、6つのコマンドの入力を1つのfab to_test



の入力とエディターのコメントの入力にfab to_test



ます。 同時に、彼はプレビューを行います-ブランチでどのような変更が発生するかを確認し、開発ブランチの成果をテストブランチにマージします。 マージが不要な場合は、 fab commit







解説者



Django設定オプションのスイッチとして使用します。



気を散らして、すぐに言いたいのは、これが異なるジャンゴ設定を異なる状況に使用する唯一の真の方法ではないということです。 これはそのうちの1つです。 他のオプションはここにあります



 # -*- coding: utf-8 -*- from os import path from fabric.api import env, local env.settings_files = ( path.join('projcet_root', 'settings.py'), path.join('projcet_root', 'module', 'settings.py'), ) env.settings_versions = { 'develop': '#-D', 'test': '#-T', 'production': '#-P', } def _commenter(c_type, filename, regex, use_sudo=False, char='#', backup='.bak'): """     . """ if use_sudo: sudoer = 'sudo ' else: sudoer = '' if regex.startswith('^'): regex = regex[1:] if regex.endswith('$'): regex = regex[:-1] if c_type == 'comment': replacement = '%s ' % char char = '[^%s ]' % char regex = '(%s.+%s.*)' % (char, regex) else: replacement = '' regex = r'%s ?(.+%s.*)' % (char, regex) local(r"{sudo}sed -i{backup} -r -e 's/^([[:space:]]*){regex}$/" r"\1{replacement}\2/g' {filename}".format(**{ 'sudo': sudoer, 'backup': backup, 'replacement': replacement, 'regex': regex, 'filename': filename, })) def lcomment(*args, **kwargs): """ . """ _commenter('comment', *args, **kwargs) def luncomment(*args, **kwargs): """ . """ _commenter('uncomment', *args, **kwargs) def update_settings(mode): """  . """ for filename in env.settings_files: for version in env.settings_versions: if mode == version: luncomment(filename, versions[version]) elif: lcomment(filename, versions[version])
      
      







コードはヒストグラムでも利用できます。



fabric



自体には、 comment



機能を備えたcontrib.files



モジュールがあります。この機能は、 contrib.files



contrib.files



機能するという点で「コメンター」を繰り返し、コメントを行の先頭ではなく、コメント記号とテキストの間にスペースを挿入します(これにより、 崇高なテキスト )が作成され、行末でのみマーカーが検索されます。



彼ができること。 fab update_settings:mode=<>



コマンドfab update_settings:mode=<>



て、モードに対応するマーカーで行のコメントを解除し、対応しないマーカーでコメントすることにより、 env.settings_files



リストからファイルをバイパスできます。



つまり fab update_settings:mode=test



呼び出しfab update_settings:mode=test



は、ファイル「 /project_root/settings.py



」および「 /project_root/settings.py



/project_root/module/settings.py



し、「#-D」および「#-P」で終わる行にコメントし、「#-T」で終わるコメント解除します。



これにより、次のタイプの構成を作成できます。

 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'dvl', # #-D # 'NAME': 'prd', # #-P # 'NAME': 'tst', # #-T 'USER': 'ruutt', 'PASSWORD': 'gigopasswort', 'CHARSET': 'UTF8', }, }
      
      







...コミット段階でそれらを分離します。

 def deploy(branch): env.test_branch =branch #      commit(False) #      ,    update_settings(branch) #        #    , ,   .. local('git checkout %s' % env.dev_branch) #     prompt("OK. Press any <Enter> to exit.") #    IDE     - #             .
      
      







そして、このすべてのハッシュを利用できるので、 fab deploy:branch=test



です。 コンソールにいくつのチームがあり、チームに費やす時間が節約されるかはあなたにお任せします。



ここに、私が共有することにしたそのような運用時間を示します。 そして、どういうわけか、私たちのお気に入りの雑誌のページでファブリックがすでに非常にさりげなく言及されています...



All Articles