জাঙ্গো: কীভাবে উন্নয়ন এবং উত্পাদন সেটিংস পরিচালনা করবেন?


128

আমি একটি বেসিক অ্যাপ্লিকেশন বিকাশ করছি। এখন স্থাপনার পর্যায়ে এটি স্পষ্ট হয়ে উঠেছে যে আমার একটি স্থানীয় সেটিংস এবং উত্পাদন সেটিংস উভয়েরই প্রয়োজন have

নিম্নলিখিতগুলি জানলে এটি দুর্দান্ত হবে:

  • উন্নয়ন এবং উত্পাদন সেটিংস মোকাবেলা করার জন্য কীভাবে সেরা।
  • কীভাবে কেবল ডেঙ্গুলি-ডিবাগ-টুলবারের মতো অ্যাপ্লিকেশনগুলি বিকাশের পরিবেশে রাখা যায়।
  • বিকাশ এবং স্থাপনার সেটিংসের জন্য অন্য কোনও টিপস এবং সেরা অনুশীলন।

উত্তর:


108

DJANGO_SETTINGS_MODULEএনভায়রনমেন্ট ভেরিয়েবল তা নিয়ন্ত্রণ সেটিংস ফাইল জ্যাঙ্গো লোড করা হবে।

সুতরাং আপনি আপনার নিজের পরিবেশের জন্য পৃথক কনফিগারেশন ফাইল তৈরি করুন (নোট করুন যে তারা অবশ্যই import *পৃথক, "ভাগ করা সেটিংস" ফাইল থেকে উভয়ই করতে পারেন ) এবং DJANGO_SETTINGS_MODULEকোনটি ব্যবহার করবেন তা নিয়ন্ত্রণ করতে ব্যবহার করুন।

এখানে কীভাবে:

জাজানো ডকুমেন্টেশনে যেমন উল্লেখ করা হয়েছে:

DJANGO_SETTINGS_MODULE এর মান পাইথন পাথ সিনট্যাক্সে থাকা উচিত, যেমন mysite.settings। নোট করুন যে সেটিংস মডিউলটি পাইথন আমদানি অনুসন্ধানের পথে থাকা উচিত।

সুতরাং, ধরে নেওয়া যাক আপনি তৈরি করেছেন myapp/production_settings.pyএবং myapp/test_settings.pyআপনার উত্স ভান্ডারে আছে।

DJANGO_SETTINGS_MODULE=myapp.production_settingsসেক্ষেত্রে আপনি যথাক্রমে পূর্বটি ব্যবহার DJANGO_SETTINGS_MODULE=myapp.test_settingsকরতে এবং পরবর্তীটি ব্যবহার করতে সেট করেছেন set


এখান থেকে, সমস্যাটি DJANGO_SETTINGS_MODULEপরিবেশের ভেরিয়েবলটি সেট করে নেমে আসে ।

DJANGO_SETTINGS_MODULEস্ক্রিপ্ট বা শেল ব্যবহার করে সেট করা হচ্ছে

এর পরে আপনি শুধু জ্যাঙ্গো আরম্ভ করার পূর্বে আপনার শেল থেকে এটি চালানোর (পরিবেশ সেটিং দ্বারা) সঠিক সেটিংস লোড করার জন্য একটি স্ক্রিপ্ট বা একটি প্রক্রিয়া ম্যানেজার ব্যবহার করতে পারেন, অথবা: export DJANGO_SETTINGS_MODULE=myapp.production_settings

মনে রাখবেন যে আপনি যে কোনও সময় শেল থেকে এই রফতানি চালাতে পারেন - এটি আপনার .bashrcবা কোনও কিছুতে বাস করার দরকার নেই।

DJANGO_SETTINGS_MODULEএকটি প্রক্রিয়া পরিচালক ব্যবহার করে সেট করা

আপনি যদি পরিবেশটি নির্ধারণ করে এমন বুটস্ট্র্যাপ স্ক্রিপ্ট লেখার আগ্রহী না হন (এবং সেভাবে অনুভব করার জন্য খুব ভাল কারণ রয়েছে!), আমি একটি প্রক্রিয়া পরিচালক ব্যবহার করার পরামর্শ দেব:


পরিশেষে, নোট করুন আপনি সম্পূর্ণ ভিন্ন অবস্থানে সেটিংস সংরক্ষণ করার জন্য ভেরিয়েবলের সুবিধা নিতে পারেনPYTHONPATH (উদাহরণস্বরূপ, প্রোডাকশন সার্ভারে, সেগুলিতে সংরক্ষণ করে /etc/)। এটি অ্যাপ্লিকেশন ফাইলগুলি থেকে কনফিগারেশন পৃথক করার অনুমতি দেয়। আপনি এটি বা নাও চাইতে পারেন, এটি আপনার অ্যাপ্লিকেশনটিকে কীভাবে কাঠামোবদ্ধ করা হয়েছে তার উপর নির্ভর করে।


7
পরিষ্কার করার জন্য, যেহেতু settings.pyফাইলটি SiteName/settings.pyডিফল্টরূপে সঞ্চিত থাকে, আপনি যদি নিজের বিকল্প সেটিংস ফাইলগুলিকে একই ডিরেক্টরিতে রাখেন তবে বিন / অ্যাক্টিভেটে যুক্ত লাইনটি DJANGO_SETTINGS_MODULE="SiteName.test_settings"অন্যথায় দুর্দান্ত উত্তর পড়তে হবে !
আলেক্সভাণ্ডারী

2
কাকতালীয়ভাবে আপনি কীভাবে এই পদক্ষেপটি কীভাবে করবেন সে সম্পর্কে একটি টিউটোরিয়ালটি জানেন, আমি জ্যাঙ্গোতে নতুন এবং জ্যাঙ্গো_সেটটিংস_মডুডল বা পাইথনপথটি কোথায় সেট করতে হবে তা জানি না
যীশু আলমারাল - হ্যাকাপ্রেন্ডে

এই সমাধানটি কোনও কনডা এনভির জন্য সত্য বলে মনে হচ্ছে না। কোন কনডা এনভিয়েতে কোনও বিন / অ্যাক্টিভেট নেই।
পৌয়া ইউসফি

1
@ পৌয়া ইউসুফি: এই উত্তরটি ব্যবহার করার জন্য আপনার একেবারে ভার্চুয়ালেনভ ব্যবহার করার দরকার নেই । উত্তরটি সত্যিই দুটি পদক্ষেপে ফোটায়: ক) পৃথক সেটিংস ফাইলগুলি ব্যবহার করুন এবং খ) DJANGO_SETTINGS_MODULEআপনি যেটি ব্যবহার করতে চান তা চয়ন করতে ব্যবহার করুন। সংশোধন bin/activate করানো একটি দ্বিতীয়টি (টিবিএইচ, আমি আর মনে করি না যাইহোক এটি কোনও ভাল ধারণা, সুতরাং আমি এটি গ্রহণ করেছি), তবে এটি একমাত্র নয়।
টমাস অরোজকো

এটি কার্যকর যদি আপনি পাইচার্ম কমিউনিটি সংস্করণে জ্যাঙ্গো ব্যবহার করছেন এবং আপনার কমান্ড লাইন এবং পাইচার্ম সম্প্রদায়ের উভয়টিতেই ইউনিট পরীক্ষা চালানো দরকার। ধরুন আপনি নিজের উত্স ভাণ্ডারগুলিতে myapp / settings.py এ কেবল একটি সাধারণ কনফিগারেশন ফাইল তৈরি করেছেন। সেক্ষেত্রে পরীক্ষার কেসগুলি চালানোর জন্য আপনি এটির জন্য মেনু আরউন / সম্পাদনা কনফিগারেশন / পরিবেশ পরিবর্তনশীলটি "DJANGO_SETTINGS_MODULE = মায়াপ.সেটেটিংস" সেট করতে চান।
F.Tamy

57

ডিফল্টরূপে উত্পাদন সেটিংস ব্যবহার করুন, তবে settings_dev.pyআপনার settings.pyফাইলের মতো একই ফোল্ডারে কল করা একটি ফাইল তৈরি করুন। ওভাররাইডগুলি যুক্ত করুন, যেমন DEBUG=True

যে কম্পিউটারে বিকাশের জন্য ব্যবহৃত হবে, আপনার ~/.bashrcফাইলে এটি যুক্ত করুন:

export DJANGO_DEVELOPMENT=true

আপনার settings.pyফাইলের নীচে, নিম্নলিখিতগুলি যুক্ত করুন।

# Override production variables if DJANGO_DEVELOPMENT env variable is set
if os.environ.get('DJANGO_DEVELOPMENT'):
    from settings_dev import *  # or specific overrides

(দ্রষ্টব্য যে *পাইথনে সাধারণত আমদানি এড়ানো উচিত)

ডিফল্টরূপে প্রোডাকশন সার্ভারগুলি কোনও কিছুই ওভাররাইড করবে না। সম্পন্ন!

অন্যান্য উত্তরের তুলনায়, এটি সহজতর কারণ এটি আপডেট করার প্রয়োজন হয় না PYTHONPATHবা সেটিংসের প্রয়োজন হয় DJANGO_SETTINGS_MODULEযা আপনাকে কেবল একবারে একটি জাঙ্গো প্রকল্পে কাজ করতে দেয়।


8
এটি কিভাবে সঠিক উত্তর নয়? আজকাল সত্যিই একটি জগাখিচুড়ি। Ty cs01
codyc4321

if os.environ.get('DJANGO_DEVELOPMENT', 'true')কাজ করে। আমি কেবল এটি উল্লেখ করেছি কারণ উপরের is not trueপদ্ধতিটি পাইথন ৩. 3. এ আমদানি করতে ব্যর্থ হয়েছিল।
বিআরটি

1
@ বিআরটি এটি একটি খারাপ ধারণা: এটি সর্বদা আপনার DEVসেটিংস ব্যবহার করবে যা কোনও সার্বজনীন সার্ভারে ব্যক্তিগত ডেটা ফাঁস করবে। আপনি সত্যিই কেবল DJANGO_DEVELOPMENTপরিবেশের পরিবর্তনশীল (যেমন is not None) উপস্থিত কিনা তা পরীক্ষা করতে চান ।
cs01

তথ্যের জন্য ধন্যবাদ, @ সিএস 01 আমি বুঝতে পেরেছিলাম যে আমি যখন আমার সাইটকে ভুল সেটিংস লোডিংয়ের সাথে উড়িয়ে দিয়েছিলাম তখন আমি কিছু ভুল করেছি, তবে settings_dev.pyসার্ভারে কেন লোড হচ্ছে তা আমি নিশ্চিত ছিলাম না ।
brt

2
@ cs01 আমি কেবল চেকটি বাদ দিয়েই নিশ্চিত হয়েছি যে এটি বিদ্যমান এবং সত্য সত্য is not None। এছাড়াও os.getenvসাধারণভাবে সংক্ষেপে হয়
Tjorriemorrie

35

আমার কাছে পরিবেশ প্রতি সাধারণত একটি সেটিংস ফাইল এবং একটি ভাগ করা সেটিংস ফাইল থাকে:

/myproject/
  settings.production.py
  settings.development.py
  shared_settings.py

আমার প্রতিটি পরিবেশের ফাইলের মধ্যে রয়েছে:

try:
    from shared_settings import *
except ImportError:
    pass

এটি আমাকে প্রয়োজনে ভাগ করা সেটিংস ওভাররাইড করার অনুমতি দেয় (সেই স্তরের নীচে পরিবর্তনগুলি যুক্ত করে)।

তারপরে আমি সেটিংসের সাথে যুক্ত করে কোন সেটিংস ফাইলগুলি ব্যবহার করব তা নির্বাচন করুন py

ln -s settings.development.py settings.py

2
আপনি পেপ 8 নিষেধাজ্ঞার সাথে কীভাবে আচরণ করবেন import *? আপনি কি এই চেকটি অক্ষম করবেন? আমি এই আমদানিটি একটিতে মুড়িয়ে ফেলেছি exec()তবে তারপরে আমার এই ফাইলটিতে সংজ্ঞায়িত নয় এমন ভেরিয়েবলগুলির শর্তসাপেক্ষ থাকতে পারে না এবং আমি INSTALLED_APPSভেরিয়েবল পরিবর্তন করতে পারি না কারণ এটি "অপরিজ্ঞাত"
মিখাইল

11
আমরা আমাদের সেটিংস ফাইলগুলিকে লিন্ট করি না, কারণ পাইথনে কনফিগারেশনটি যেমন প্রকাশ করা হয় তত এগুলি আসলে কোড হয় না।
ড্যানিয়েল ওয়াটকিন্স

17

6 টি সহজ ধাপে এটি আমি এভাবে করি:

  1. আপনার প্রকল্প ডিরেক্টরিতে একটি ফোল্ডার তৈরি করুন এবং এটির নাম দিন settings

    প্রকল্প কাঠামো:

    myproject/
           myapp1/
           myapp2/              
           myproject/
                  settings/
  2. ভেতরে চার পাইথন ফাইল তৈরি settingsডিরেক্টরি যথা __init__.py, base.py, dev.pyএবংprod.py

    সেটিংস ফাইলগুলি:

    settings/
         __init__.py
         base.py
         prod.py
         dev.py 
  3. __init__.pyনিম্নলিখিত বিষয়বস্তুটি এটি খুলুন এবং পূরণ করুন:

    init .py:

    from .base import *
    # you need to set "myproject = 'prod'" as an environment variable
    # in your OS (on which your website is hosted)
    if os.environ['myproject'] == 'prod':
       from .prod import *
    else:
       from .dev import *
  4. base.pyএটিকে সমস্ত সাধারণ সেটিংস খুলুন এবং এটি পূরণ করুন (এটি উত্পাদন পাশাপাশি উন্নয়নের ক্ষেত্রেও ব্যবহৃত হবে) উদাহরণস্বরূপ:

    base.py:

    import os
    ...
    INSTALLED_APPS = [...]
    MIDDLEWARE = [...]
    TEMPLATES = [{...}]
    ...
    STATIC_URL = '/static/'
    STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
    MEDIA_ROOT = os.path.join(BASE_DIR, '/path/')
    MEDIA_URL = '/path/'
  5. dev.pyউদাহরণস্বরূপ বিকাশ নির্দিষ্ট যে জিনিসগুলি খুলুন এবং অন্তর্ভুক্ত করুন:

    dev.py:

    DEBUG = True
    ALLOWED_HOSTS = ['localhost']
    ...
  6. prod.pyউদাহরণস্বরূপ উত্পাদন নির্দিষ্ট যে স্টাফ খুলুন এবং অন্তর্ভুক্ত করুন:

    prod.py:

    DEBUG = False
    ALLOWED_HOSTS = ['www.example.com']
    LOGGING = [...]
    ...

10

একাধিক settings*.pyফাইল তৈরি করুন , প্রতি পরিবেশ পরিবর্তনের প্রয়োজন ভেরিয়েবলগুলিকে এক্সপ্লোর্ট করে। তারপরে আপনার মাস্টার settings.pyফাইলটির শেষে :

try:
  from settings_dev import *
except ImportError:
  pass

আপনি আলাদা রাখুন settings_* প্রতিটি পর্যায়ের জন্য ফাইল রাখেন।

আপনার settings_dev.pyফাইলের শীর্ষে , এটি যুক্ত করুন:

import sys
globals().update(vars(sys.modules['settings']))

ভেরিয়েবলগুলি আমদানি করতে আপনার পরিবর্তন করতে হবে।

এই উইকির এন্ট্রিটিতে আপনার সেটিংসকে কীভাবে ভাগ করা যায় সে সম্পর্কে আরও ধারণা রয়েছে।


ধন্যবাদ বারহাম! অ্যাপ্লিকেশনটি মোতায়েন করার সময়, আমার ডিপ্লোয়মেন্ট সেটিংসকে কার্যধারা হিসাবে দেখতে আমার কি সেটিংস_দেব ফাইলটি সরাতে হবে?
ক্রিস্টিয়ান রোবাক

হ্যাঁ, বা আমদানিটি এর সাথে প্রতিস্থাপন করুনsettings_prod.py
বুরহান খালিদ

1
একটি মোতায়েনের উপর মাস্টার সেটিংস.পি ফাইলটি সম্পাদনা করার অর্থ এটি সংস্করণ নিয়ন্ত্রণের সাথে সংঘর্ষে নেমে আসবে, সুতরাং এটি এগিয়ে যাওয়ার সর্বোত্তম উপায় নয়। আমি বলব যে থমাস অরোজকোর বিকল্পটি সর্বোত্তম - আপনি আপনার ভার্চুয়ালেনভ পোস্টএকটিভ স্ক্রিপ্টে বা আপনার বন্দুকের বা মোড_উজি সেটআপে DJANGO_SETTINGS_MODULE সেট করতে পারেন
স্টিভ জলিম

1
সম্ভবত এটি উল্লেখ করা উচিত, আপনি কখনও স্টেজ-নির্দিষ্ট ফাইলগুলিকে উত্স নিয়ন্ত্রণে যুক্ত করবেন না। আমি ধরে নিয়েছি যে এটি বোঝা গিয়েছিল যে আপনি কোনও প্রকল্পের একটি পর্যায়ে নির্দিষ্ট সেটিংগুলি ঘিরে ফেলবেন না।
বুরহান খালিদ

আপনি যদি ভার্চুয়ালেনভ ব্যবহার করছেন তবে এটি সাধারণত {{প্রকল্প_নাম}} সেটিংসে ডিফল্ট হয়ে যায়। সুতরাং 'সেটিংস' sys.modules এ কী হবে না। এটি হবে 'মাইপ্রজেক্ট.সেটেটিংস' (বা আপনার প্রকল্পের নাম যাই হোক না কেন)। আপনি modname = "%s.settings" % ".".join(__name__.split('.')[:-1])পুরো মডিউলটির নামটি পেতে এবং তারপরে ব্যবহার করতে পারেন globals().update(vars(sys.modules[modname]))। আমি এটি আমার জন্য সুন্দরভাবে কাজ খুঁজে পেতে। অবশ্যই প্রোগ্রামিং হিসাবে একটি স্ট্রিং পক্ষে মডিউল নাম নির্ধারণ সম্পর্কে বিট যাওয়ার পরে সম্ভবত বেশিরভাগ ক্ষেত্রে কাজ করবে।
এরিক

9

আমি দুর্দান্ত জ্যাঙ্গো-কনফিগারেশন ব্যবহার করি এবং সমস্ত সেটিংস আমার মধ্যে সঞ্চয় করা থাকে settings.py:

from configurations import Configuration

class Base(Configuration):
    # all the base settings here...
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    ...

class Develop(Base):
    # development settings here...
    DEBUG = True 
    ...

class Production(Base):
    # production settings here...
    DEBUG = False

জ্যাঙ্গো প্রকল্পটি কনফিগার করতে আমি কেবল দস্তাবেজগুলি অনুসরণ করেছি ।


7

আমরা যে পদ্ধতিটি ব্যবহার করি তা এখানে:

  • একটি settingsপাঠযোগ্যতার জন্য একাধিক ফাইলে সেটিংসকে বিভক্ত করার মডিউল;
  • একটি .env.jsonশংসাপত্র এবং প্যারামিটারগুলি সংরক্ষণ করার জন্য ফাইল যা আমরা আমাদের গিট সংগ্রহস্থল থেকে বাদ দিতে চাই, বা এটি পরিবেশ নির্দিষ্ট;
  • একটি env.pyফাইলটি পড়ার .env.jsonফাইল

নিম্নলিখিত কাঠামো বিবেচনা:

...
.env.json           # the file containing all specific credentials and parameters
.gitignore          # the .gitignore file to exclude `.env.json`
project_name/       # project dir (the one which django-admin.py creates)
  accounts/         # project's apps
    __init__.py
    ...
  ...
  env.py            # the file to load credentials
  settings/
    __init__.py     # main settings file
    database.py     # database conf
    storage.py      # storage conf
    ...
venv                # virtualenv
...

সঙ্গে .env.jsonমত:

{
    "debug": false,
    "allowed_hosts": ["mydomain.com"],
    "django_secret_key": "my_very_long_secret_key",
    "db_password": "my_db_password",
    "db_name": "my_db_name",
    "db_user": "my_db_user",
    "db_host": "my_db_host",
}

এবং project_name/env.py:

<!-- language: lang-python -->
import json
import os


def get_credentials():
    env_file_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    with open(os.path.join(env_file_dir, '.env.json'), 'r') as f:
        creds = json.loads(f.read())
    return creds


credentials = get_credentials()

আমাদের নীচের সেটিংস থাকতে পারে:

<!-- language: lang-py -->
# project_name/settings/__init__.py
from project_name.env import credentials
from project_name.settings.database import *
from project_name.settings.storage import *
...

SECRET_KEY = credentials.get('django_secret_key')

DEBUG = credentials.get('debug')

ALLOWED_HOSTS = credentials.get('allowed_hosts', [])

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    ...
]

if DEBUG:
    INSTALLED_APPS += ['debug_toolbar']

...

# project_name/settings/database.py
from project_name.env import credentials

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': credentials.get('db_name', ''),
        'USER': credentials.get('db_user', ''),
        'HOST': credentials.get('db_host', ''),
        'PASSWORD': credentials.get('db_password', ''),
        'PORT': '5432',
    }
}

এই সমাধানের সুবিধাগুলি হ'ল:

  • গিট সংগ্রহস্থল পরিবর্তন না করে স্থানীয় বিকাশের জন্য ব্যবহারকারী নির্দিষ্ট শংসাপত্র এবং কনফিগারেশন ;
  • পরিবেশ নির্দিষ্ট কনফিগারেশন , আপনি উদাহরণস্বরূপ তিনটি পৃথক পরিবেশ .env.jsonযেমন দেব, স্থবির এবং উত্পাদন সহ তিনটি পৃথক পরিবেশ থাকতে পারে;
  • শংসাপত্রগুলি সংগ্রহস্থলের মধ্যে নেই

আমি আশা করি এটি সাহায্য করে, আপনি যদি এই সমাধান সহ কোনও সতর্কতা দেখতে পান তবে আমাকে জানান।


অভিমানী যেখানে envপ্রতিস্থাপন হয় dev, prodইত্যাদি? পুরানো settings.pyফাইলের মধ্যে কি যায় ? কি storage.pyএবং আছে database.py?
dbinott

হাই @dbinott, আপনি সহজেই আপডেট করতে পারেন env.pyফাইল যাতে আপনার চয়ন করতে পারেন, একটি পরিবেশ পরিবর্তনশীল, যা ফাইল লোড করতে সঙ্গে
Charlesthk

উদাহরণস্বরূপ: সার্ভার = os.environ.get ( 'কনফারেন্স', '') File_ = চ "। .Env {সার্ভার} .json"
Charlesthk

আপনি কেন স্থানীয় নেভিগেশন অজগর ডেটাটাইপের বিপরীতে জসন করবেন?
বিমান হামলায়

4

আমি ফলোলিং ফাইল কাঠামো ব্যবহার করি:

project/
   ...
   settings/
   settings/common.py
   settings/local.py
   settings/prod.py
   settings/__init__.py -> local.py

সুতরাং __init__.py(Windows মধ্যে UNIX মধ্যে Ln বা mklink) একটি লিঙ্ক হয় local.pyবা হতে পারে prod.py, যাতে কনফিগারেশন এখনও project.settingsপরিষ্কার এবং সংগঠিত হয় মডিউল, এবং আপনি এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করতে পারেন আপনি একটি নির্দিষ্ট কনফিগ ব্যবহার করতে চান DJANGO_SETTINGS_MODULEকরতেproject.settings.prod যদি আপনি প্রয়োজন উত্পাদন পরিবেশের জন্য একটি কমান্ড চালানো।

ফাইলগুলিতে prod.pyএবং local.py:

from .shared import *

DATABASE = {
    ...
}

এবং shared.pyফাইলটি নির্দিষ্ট কনফিগার ছাড়াই বিশ্বব্যাপী রাখে।


3

CS01 এর উত্তর বন্ধ করা:

যদি আপনার পরিবেশের পরিবর্তনশীল নিয়ে সমস্যা হয় তবে তার মানটি একটি স্ট্রিংয়ে সেট করুন (যেমন আমি করেছি DJANGO_DEVELOPMENT="true" )।

আমি সিএস 01 এর ফাইল ওয়ার্কফ্লোও নিম্নরূপে পরিবর্তন করেছি:

#settings.py
import os
if os.environ.get('DJANGO_DEVELOPMENT') is not None:
    from settings_dev import * 
else:
    from settings_production import *
#settings_dev.py
development settings go here
#settings_production.py
production settings go here

এইভাবে, জাজানো উপযুক্ত সেটিংস ফাইল চালানোর আগে কোনও সেটিংস ফাইলের সম্পূর্ণতা পড়তে হবে না। যদি আপনার প্রোডাকশন ফাইলটির এমন জিনিস প্রয়োজন হয় যা কেবলমাত্র আপনার উত্পাদন সার্ভারে থাকে তবে এই সমাধানটি কার্যকর হয়।

দ্রষ্টব্য: পাইথন 3 এ, আমদানি করা ফাইলগুলিতে .সংযোজন হওয়া প্রয়োজন (যেমন from .settings_dev import *)


1

আপনি যদি 1 সেটিংস ফাইল রাখতে চান এবং আপনার বিকাশ অপারেটিং সিস্টেমটি আপনার উত্পাদন অপারেটিং সিস্টেমের চেয়ে আলাদা হয় তবে আপনি এটি আপনার সেটিংসের নীচে রাখতে পারেন py

from sys import platform
if platform == "linux" or platform == "linux2":
    # linux
    # some special setting here for when I'm on my prod server
elif platform == "darwin":
    # OS X
    # some special setting here for when I'm developing on my mac
elif platform == "win32":
    # Windows...
    # some special setting here for when I'm developing on my pc

আরও পড়ুন: পাইথনে অপারেটিং সিস্টেমটি কীভাবে চেক করব?


1

এটির উত্তর দেওয়া হয়েছে বলে মনে হয়, তবে সংস্করণ নিয়ন্ত্রণের সাথে একত্রে ব্যবহার করা একটি পদ্ধতি যা আমি নিম্নলিখিত:

আমার স্থানীয় বিকাশের পরিবেশের সেটিংগুলির মতো একটি ডিরেক্টরিতে একটি এনভিপি.পি ফাইল সেটআপ করুন যা আমি .gitignore এ যুক্ত করেছি:

env.py:

#!usr/bin/python

DJANGO_ENV = True
ALLOWED_HOSTS = ['127.0.0.1', 'dev.mywebsite.com']

.gitignore:

mywebsite/env.py

settings.py:

if os.path.exists(os.getcwd() + '/env.py'):
    #env.py is excluded using the .gitignore file - when moving to production we can automatically set debug mode to off:
    from env import *
else:
    DJANGO_ENV = False

DEBUG = DJANGO_ENV

আমি কেবল এটির কাজটি খুঁজে পেয়েছি এবং আরও মার্জিত - env.py দিয়ে আমাদের স্থানীয় পরিবেশের পরিবর্তনগুলি দেখতে সহজ এবং আমরা একাধিক সেটিংস.পি ফাইল বা পছন্দগুলি ছাড়াই এই সমস্তগুলি পরিচালনা করতে পারি। এই পদ্ধতিগুলি সমস্ত প্রকারের স্থানীয় পরিবেশের ভেরিয়েবলগুলি ব্যবহার করার অনুমতি দেয় যা আমরা আমাদের উত্পাদন সার্ভারে সেট করতে চাই না। সংস্করণ নিয়ন্ত্রণের মাধ্যমে .gitignore ব্যবহার করে আমরা সবকিছুকে নির্বিঘ্নে সংহত করে রাখছি।


সহজ সমাধান। একটি Configশ্রেণীর অভ্যন্তরের env.pyফাইলের মধ্যেও সমস্ত কিছু সংজ্ঞায়িত করতে পারে । তারপরে কোনটির পরিবর্তে import *মডিউলটি আমদানি করা যায় from env import Config। এইভাবে আপনার এটি ব্যবহার করারও দরকার নেই os.pathযা এই পুরো জিনিসটিকে আরও সহজ করে তোলে কিনা তা পরীক্ষা করে দেখুন।
সিদ্ধার্থ পান্ত

0

settings.pyউত্পাদন জন্য ব্যবহার করুন । একই ডিরেক্টরিতে settings_dev.pyওভাররাইডগুলির জন্য তৈরি করুন ।

# settings_dev.py

from .settings import * 

DEBUG = False

কোনও ডেভ মেশিনে আপনার জাজানো অ্যাপটি চালিয়ে যান:

DJANGO_SETTINGS_MODULE=<your_app_name>.settings_dev python3 manage.py runserver

একটি প্রোড মেশিনে রান করুন যেন আপনার সবেমাত্র ছিল settings.py আর কিছু নেই।

সুবিধাদি

  1. settings.py (উত্পাদনের জন্য ব্যবহৃত) এটি অন্য যে কোনও পরিবেশের এমনকি উপস্থিত রয়েছে তা সম্পূর্ণ অজ্ঞাব্য is
  2. প্রোড এবং দেবের মধ্যে পার্থক্যটি দেখতে আপনি কেবল একটি একক অবস্থানের দিকে তাকান - settings_dev.py। কনফিগারেশনের জড়ো করার কোন প্রয়োজন নেই জুড়ে ছড়িয়ে ছিটিয়ে settings_prod.py, settings_dev.pyএবংsettings_shared.py
  3. যদি কোনও প্রোডাক্ট সমস্যার সমাধানের পরে কেউ আপনার প্রোড কনফিগারেশনে একটি সেটিংস যুক্ত করে থাকেন তবে আপনি নিশ্চিত হয়ে যেতে পারেন যে এটি আপনার ডিভাইস কনফিগারেশনেও উপস্থিত হবে (স্পষ্টভাবে ওভাররাইড না করা থাকলে)। সুতরাং বিভিন্ন কনফিগার ফাইলের মধ্যে বিভাজন হ্রাস করা হবে।

0

ফাইলগুলি সেট করার সমস্যার জন্য, আমি অনুলিপি পছন্দ করি

Project
   |---__init__.py   [ write code to copy setting file from subdir to current dir]
   |---settings.py  (do not commit this file to git)
   |---setting1_dir
   |         |--  settings.py
   |---setting2_dir
   |         |--  settings.py

আপনি যখন জাঙ্গো চালাবেন, __init__py রান হবে। এই সময়ে, settings.py in setting1_dirপ্রতিস্থাপন করা হবেsettings.py in Project

কিভাবে বিভিন্ন env চয়ন?

  • পরিবর্তন __init__.pyসরাসরি ।
  • সংশোধন করার জন্য একটি বাশ ফাইল তৈরি করুন __init__.py
  • লিনাক্সে env পরিবর্তন করুন এবং তারপরে __init__.pyএই পরিবর্তনশীলটি পড়ুন।

কেন এভাবে ব্যবহার করবেন?

আমি একই ডিরেক্টরিতে এতগুলি ফাইল পছন্দ করি না, তাই অনেকগুলি ফাইল অন্য অংশীদারদের বিভ্রান্ত করবে এবং আইডিইয়ের পক্ষে খুব ভাল নয় ((আইডিই আমরা কোন ফাইলটি ব্যবহার করি তা খুঁজে পায় না)

আপনি যদি এই সমস্ত বিবরণটি দেখতে না চান তবে আপনি প্রকল্পটি দুটি ভাগে ভাগ করতে পারেন।

  1. আপনার প্রকল্পটি ঠিক সেটআপ করার জন্য আপনার ছোট্ট সরঞ্জামটি বসন্তের প্রাথমিকের মতো করুন copy (অনুলিপি ফাইলের মতো করুন)
  2. আপনার প্রকল্পের কোড

0

আমি গুগল ক্লাউড অ্যাপ ইঞ্জিনে পরিবেশের মধ্যে কনফিগারেশন পরিবর্তন করতে বিভিন্ন অ্যাপ.আইএমএল ফাইল ব্যবহার করছি।

আপনার টার্মিনাল কমান্ডে প্রক্সি সংযোগ তৈরি করতে আপনি এটি ব্যবহার করতে পারেন:

./cloud_sql_proxy -instances=<INSTANCE_CONNECTION_NAME>=tcp:1433

https://cloud.google.com/sql/docs/sqlserver/connect-admin-proxy#macos-64-bit

ফাইল: app.yaml

# [START django_app]
service: development
runtime: python37

env_variables:
  DJANGO_DB_HOST: '/cloudsql/myproject:myregion:myinstance'
  DJANGO_DEBUG: True

handlers:
# This configures Google App Engine to serve the files in the app's static
# directory.
- url: /static
  static_dir: static/

# This handler routes all requests not caught above to your main app. It is
# required when static routes are defined, but can be omitted (along with
# the entire handlers section) when there are no static files defined.
- url: /.*
  script: auto
# [END django_app]

-1

এটি আমার সমাধান, দেব, পরীক্ষা এবং উত্সাহের জন্য বিভিন্ন পরিবেশ সহ

import socket

[...]

DEV_PC = 'PC059'
host_name = socket.gethostname()

if host_name == DEV_PC:
   #do something
   pass
elif [...]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.