2017-09-12 8 views
-1

次のAWKスクリプトを使用して、settings.pyファイルを更新します。AWKがファイルの次のセクションを上書きしないようにします。

オリジナルsettings.py

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    } 
} 


# Password validation 
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators 

AUTH_PASSWORD_VALIDATORS = [ 
    { 
     'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 
    }, 
] 

ここで完璧に動作DATABASEセクションを更新AWKスクリプトです。

awk 'function pr(sp, k, v){ # prints key-value pair with indentation 
     printf "%s\047%s\047: \047%s\047,\n",sp,k,v; 
    } 
    BEGIN { 
    db_user = ENVIRON["DB_USER"] 
    db_pass = ENVIRON["DB_PASS"] 
    db_name = ENVIRON["DB_NAME"] 
    } 
    /sqlite/{ sub(/sqlite[0-9]*/,"mysql",$0) } 
    /NAME/{ sp=substr($0,1,index($0,"\047")-1); 
      print sp$1" \047" db_name "\047,"; 
      pr(sp,"USER", db_user); pr(sp,"PASSWORD", db_pass); 
      pr(sp,"HOST","localhost"); pr(sp,"PORT",""); next 
    }1' 

AWKスクリプトの後に新しいsettings.pyを出力します。これは、以下のAUTHセクションも更新しています。

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'django', 
     'USER': 'django', 
     'PASSWORD': 'django', 
     'HOST': 'localhost', 
     'PORT': '', 
    } 
} 


# Password validation 
# https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators 

AUTH_PASSWORD_VALIDATORS = [ 
    { 
     'NAME': 'django', 
     'USER': 'django', 
     'PASSWORD': 'django', 
     'HOST': 'localhost', 
     'PORT': '', 
    }, 

どのようにしてAWKがAUTHセクションを上書きするのを止めることができますか?

答えて

1

次のアップデートの適用:

awk 'function pr(sp, k, v){ # prints key-value pair with indentation 
     printf "%s\047%s\047: \047%s\047,\n",sp,k,v; 
    } 
    BEGIN { 
    db_user = ENVIRON["DB_USER"] 
    db_pass = ENVIRON["DB_PASS"] 
    db_name = ENVIRON["DB_NAME"] 
    } 
    /DATABASES/{ f=1 }/AUTH_PASSWORD_VALIDATORS/{ f=0 } 
    /sqlite/{ sub(/sqlite[0-9]*/,"mysql",$0) } 
    /NAME/ && f{ sp=substr($0,1,index($0,"\047")-1); 
      print sp$1" \047" db_name "\047,"; 
      pr(sp,"USER", db_user); pr(sp,"PASSWORD", db_pass); 
      pr(sp,"HOST","localhost"); pr(sp,"PORT",""); next 
    }1' settings.py 
1

小変更が

/AUTH_PASSWORD_VALIDATORS/{ auth=1 } 
!auth && /NAME/{ 
あなたの問題を解決することができます
関連する問題