আপনি কীভাবে সহজ বিকাশ এবং মোতায়েনের জন্য জাঙ্গো কনফিগার করবেন?


112

আমি ব্যবহারের প্রবণতা SQLite যখন করছেন জ্যাঙ্গো উন্নয়ন, কিন্তু একটি লাইভ সার্ভারে কিছু আরো জোরালো প্রায়ই প্রয়োজন হয় (চালু মাইএসকিউএল / পোস্টগ্রি , উদাহরণস্বরূপ)। অবিচ্ছিন্নভাবে, জ্যাঙ্গো সেটিংসেও অন্যান্য পরিবর্তনগুলি রয়েছে: বিভিন্ন লগিং অবস্থান / তীব্রতা, মিডিয়া পাথ ইত্যাদি etc.

মোতায়েনকে একটি সাধারণ, স্বয়ংক্রিয় প্রক্রিয়া তৈরি করতে আপনি এই সমস্ত পরিবর্তনগুলি কীভাবে পরিচালনা করবেন?


স্পষ্টতই আমি অন্য কারোর মতো অভিনব কিছু করি না :)। আমি কেবল ওআরএম-এর সুবিধা নিই যা জ্যাঙ্গো সরবরাহ করে।
অ্যান্ড্রু স্লেজ

1
পরিবেশের মধ্যে স্যুইচ করার জন্য সেটিংস পরিবর্তনগুলি কীভাবে স্বয়ংক্রিয় করা যায় তা নিয়ে প্রশ্ন ছিল :-)
গুরুপ্রসাদ


আপনি এই প্যাকেজটি একবার দেখতে পারেন:
django

উত্তর:


86

আপডেট: জ্যাঙ্গো-কনফিগারেশন প্রকাশ করা হয়েছে যা সম্ভবত বেশিরভাগ মানুষের পক্ষে ম্যানুয়ালি করার চেয়ে ভাল বিকল্প।

আপনি যদি ম্যানুয়ালি জিনিসগুলি করতে পছন্দ করেন তবে আমার আগের উত্তরটি এখনও প্রযোজ্য:

আমার একাধিক সেটিংস ফাইল রয়েছে।

  • settings_local.py - হোস্ট-নির্দিষ্ট কনফিগারেশন, যেমন ডাটাবেসের নাম, ফাইলের পাথ ইত্যাদি
  • settings_development.py- উন্নয়নের জন্য কনফিগারেশন ব্যবহৃত হয়, যেমন DEBUG = True
  • settings_production.py- উত্পাদন জন্য ব্যবহৃত কনফিগারেশন, যেমন SERVER_EMAIL

আমি settings.pyপ্রথমে আমদানি করা একটি ফাইলের সাথে এই সমস্তগুলি এক সাথে বেঁধে রাখি settings_local.pyএবং তারপরে অন্য দুটির মধ্যে একটি। এটি স্থির করে যে ভিতরে দুটি সেটিংস দ্বারা কোনটি লোড করা যায় settings_local.py- DEVELOPMENT_HOSTSএবং PRODUCTION_HOSTS। যে মেশিনটি চলছে তার হোস্ট-নেম খুঁজতে settings.pyকলগুলি কল platform.node()করে এবং তারপরে তালিকায় সেই হোস্টনামটি অনুসন্ধান করে এবং হোস্ট-নেমটি কোন তালিকায় খুঁজে পাওয়া যায় তার উপর নির্ভর করে দ্বিতীয় সেটিংস ফাইলটি লোড করে।

এইভাবে, আপনার settings_local.pyহোস্ট-সুনির্দিষ্ট কনফিগারেশনের সাথে ফাইলটি আপ টু ডেট রাখার বিষয়ে আপনার কেবলমাত্র চিন্তার দরকার ।

এখানে একটি উদাহরণ দেখুন ।


2
স্টেজিং (উন্নয়ন) এবং উত্পাদন একই মেশিনে থাকলে কী হবে? প্ল্যাটফর্ম.নোড () একই করে দেয়।
গৌড়াদজায়

2
উদাহরণ লিঙ্ক ডাউন।
জিকসন

হোস্ট তালিকার উপর ভিত্তি করে সেটটিংস নির্ধারণ করার জন্য দুর্দান্ত ধারণা! আমার একটি নটপিক হ'ল নামকরণ (সেটিংস_লোকাল.পি. সবসময় প্রথমে আমদানি করা হয় তাই যে কোনও সেটিংস যেগুলি ওভাররাইড করা হয় না, সেগুলি আসলে প্রযোজনায় সক্রিয় থাকবে, প্রত্যয়টিকে _localবরং বিভ্রান্ত করে তুলবে ) এবং আপনি যে মডিউলগুলি ব্যবহার করছেন না (সেটিংস /base.py, সেটিংস / স্থানীয়.পি, সেটিংস / product.py) py এটিকে পৃথক সংগ্রহস্থলে রাখা আরও বুদ্ধিমানের কাজ ... আরও ভাল, একটি সুরক্ষিত পরিষেবা যা একটি প্রচলিত উত্স (সম্ভবত বেশিরভাগের জন্য ওভারকিল) থেকে এই তথ্যটি সরবরাহ করে ... যাতে নতুন হোস্টকে নতুন রিলিজের প্রয়োজন হয় না।
ডিলানইং

আরও ভাল, যদি আপনি মেশিন ম্যানেজমেন্ট সফ্টওয়্যার ব্যবহার করেন তবে .pyফাইলের হোস্ট তালিকাটি পরীক্ষা না করে এবং এইভাবে প্রতিটি হোস্টকে প্রতিটি অন্যান্য হোস্টের কনফিগারেশন সম্পর্কিত তথ্যে অ্যাক্সেস দিলে আপনি উপযুক্ত সেটিংস ব্যবহার করার জন্য ম্যানেজমেন্ট.পি টেমপ্লেট করতে পারেন py আপনার স্থাপনার কনফিগারেশন ফাইল।
ডিলানইং 15

26

ব্যক্তিগতভাবে, আমি প্রকল্পের জন্য একটি একক সেটিংস.পি ব্যবহার করি, আমার কেবল এটির উপরের হোস্টনামটি সন্ধান করতে হবে (আমার বিকাশ মেশিনগুলির হোস্ট-নেম রয়েছে যা "গ্যাব্রিয়েল" দিয়ে শুরু হয় তাই আমার কেবল এটি রয়েছে:

import socket
if socket.gethostname().startswith('gabriel'):
    LIVEHOST = False
else: 
    LIVEHOST = True

তারপরে অন্যান্য অংশে আমার মতো জিনিস রয়েছে:

if LIVEHOST:
    DEBUG = False
    PREPEND_WWW = True
    MEDIA_URL = 'http://static1.grsites.com/'
else:
    DEBUG = True
    PREPEND_WWW = False
    MEDIA_URL = 'http://localhost:8000/static/'

ইত্যাদি। অল্প কিছুটা কম পঠনযোগ্য, তবে এটি দুর্দান্ত কাজ করে এবং একাধিক সেটিংস ফাইলগুলি জগল করে রাখে।


আমি এই ধারণাটি পছন্দ করি তবে এটি একই হোস্টে চলমান বিভিন্ন জাজানো দৃষ্টান্তের মধ্যে পার্থক্য করতে দেয় না। এটি ঘটবে, উদাহরণস্বরূপ, যদি আপনার একই হোস্টে বিভিন্ন সাবডোমেনের জন্য বিভিন্ন দৃষ্টান্ত চলমান থাকে।
এরিক

24

সেটিংস.পি এর শেষে আমার কাছে নিম্নলিখিতগুলি রয়েছে:

try:
    from settings_local import *
except ImportError:
    pass

এইভাবে যদি আমি ডিফল্ট সেটিংসগুলিকে ওভাররাইড করতে চাই তবে আমার কাছে ঠিকই सेटिंग_লোকল.পি স্থাপন করা দরকার।


4
এই সামান্য বিপজ্জনক কারন যদি একটি টাইপো হয় settings_localএকটি ফলাফল ImportError, এই exceptএটা চুপটি গ্রাস করবে।
ক্রিস মার্টিন

আপনি বার্তাটি No module named...বনাম পরীক্ষা করতে পারেন cannot import name..., তবে এটি ভঙ্গুর। অথবা, আপনার আমদানিগুলিকে সেটিংস_লোকাল.পি তে চেষ্টা করে দেখুন এবং আরও একটি সুনির্দিষ্ট ব্যতিক্রম উত্থাপন করুন: MisconfiguredSettingsবা সেই প্রভাবকে কিছু করুন।
ডিলানইং

11

আমার দুটি ফাইল আছে settings_base.pyযার মধ্যে সাধারণ / ডিফল্ট সেটিংস রয়েছে এবং যা উত্স নিয়ন্ত্রণে চেক করা আছে। প্রতিটি স্থাপনার একটি পৃথক থাকে settings.py, যা from settings_base import *শুরুতে কার্যকর হয় এবং তারপরে প্রয়োজন অনুযায়ী ওভাররাইড হয়।


1
আমিও এটি ব্যবহার করি এটি বিপরীতমুখী (dmishe এর "সেটিংস_লোকাল আমদানি *" থেকে সেটিংস.পি এর শেষে) থেকে উচ্চতর কারণ এটি স্থানীয় সেটিংসগুলিকে অ্যাক্সেস করতে এবং প্রয়োজনে বিশ্বব্যাপী পরিবর্তন করার অনুমতি দেয় allows
কার্ল মায়ার

3
এটি যদি settings_local.pyকরে তবে from settings import *এটি মানগুলিকে ওভাররাইড করতে পারে settings.py। ( settings_local.pyফাইলটি শেষের দিকে আমদানি করতে হবে settings.py)।
শেঠ

যেভাবেই করা যায়। উপরের স্ট্যাকওভারফ্লো . com/ a/ 7047633/3124256 এ একবার দেখুন । @ সেথ এটি একটি বিজ্ঞপ্তি আমদানির রেসিপি।
ডিলানং 15

7

সবচেয়ে সাদামাটা উপায় আমি খুঁজে পেয়েছি:

1) স্থানীয় বিকাশের জন্য ডিফল্ট সেটিংস.পি ব্যবহার করুন এবং 2) একটি প্রডাকশন- সেটিং.পি তৈরি করুন :

import os
from settings import *

এবং তারপরে উত্পাদনে পৃথক সেটিংগুলি ওভাররাইড করুন:

DEBUG = False
TEMPLATE_DEBUG = DEBUG


DATABASES = {
    'default': {
           ....
    }
}

2

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


1
বিকল্পভাবে আমি জাবানো টার্নকি লিনাক্সের সুপারিশ করতে চাই একটি উবুন্টু * এনআইএক্স স্ট্যাকের উপর ভিত্তি করে জাজানো প্রিনইনস্টলযুক্ত।
জোকেম

1

আমার বাহ্যিক ডিরেক্টরিতে আমার সেটিংস.পি ফাইল রয়েছে। এইভাবে, এটি উত্স নিয়ন্ত্রণে চেক হয় না, বা একটি মোতায়েনের মাধ্যমে অতিরিক্ত-লিখিত হয়। আমি আমার জ্যাঙ্গো প্রকল্পের অধীনে সেটিংস.পি ফাইলটিতে এটি কোনও ডিফল্ট সেটিংস সহ রেখেছি:

import sys
import os.path

def _load_settings(path):    
    print "Loading configuration from %s" % (path)
    if os.path.exists(path):
    settings = {}
    # execfile can't modify globals directly, so we will load them manually
    execfile(path, globals(), settings)
    for setting in settings:
        globals()[setting] = settings[setting]

_load_settings("/usr/local/conf/local_settings.py")

দ্রষ্টব্য: আপনি যদি স্থানীয়_সেটিং.পিকে বিশ্বাস করতে না পারেন তবে এটি অত্যন্ত বিপজ্জনক।


1

একাধিক সেটিংসের জিম উল্লেখ ফাইল ছাড়াও, আমিও উপরের আমার settings.py ফাইলে দুই সেটিংস জায়গা ঝোঁক BASE_DIRএবং BASE_URLকোড এবং সাইটের বেস URL এর পাথ সেট করতে চান, সব অন্যান্য সেটিংস পরিবর্তিত হয় এগুলিতে নিজেকে যুক্ত করতে।

BASE_DIR = "/home/sean/myapp/" যেমন MEDIA_ROOT = "%smedia/" % BASEDIR

সুতরাং প্রকল্পটি সরানোর সময় আমাকে কেবল এই সেটিংসটি সম্পাদনা করতে হবে এবং পুরো ফাইলটি অনুসন্ধান করতে হবে না।

আমি ফ্যাব্রিক এবং ক্যাপিস্ট্রানো (রুবি সরঞ্জাম, তবে এটি জ্যাঙ্গো অ্যাপ্লিকেশন মোতায়েন করতে ব্যবহার করা যেতে পারে) যা রিমোট ডিপ্লোয়মেন্টের অটোমেশনকে সহজতর করে তোলে তাও দেখার পরামর্শ দেব ।


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

1

ভাল, আমি এই কনফিগারেশন ব্যবহার:

সেটিংস.পি এর শেষে:

#settings.py
try:
    from locale_settings import *
except ImportError:
    pass

এবং লোকাল_সেটিংস.পিতে:

#locale_settings.py
class Settings(object):

    def __init__(self):
        import settings
        self.settings = settings

    def __getattr__(self, name):
        return getattr(self.settings, name)

settings = Settings()

INSTALLED_APPS = settings.INSTALLED_APPS + (
    'gunicorn',)

# Delete duplicate settings maybe not needed, but I prefer to do it.
del settings
del Settings

1

এত জটিল উত্তর!

প্রতিটি সেটিংস.পি ফাইলের সাথে আসে:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

আমি এই ডিরেক্টরিটি DEBUG ভেরিয়েবলটি সেট করার জন্য ব্যবহার করি (আপনার দেব কোডটি যেখানে ডিরেক্টভের সাথে পুনরায় প্রতিস্থাপন করুন):

DEBUG=False
if(BASE_DIR=="/path/to/my/dev/dir"):
    DEBUG = True

তারপরে, যতবার সেটিংস.পি ফাইলটি সরানো হবে, ততবারই ডিইবিইউজি মিথ্যা হবে এবং এটি আপনার উত্পাদন পরিবেশ।

প্রতিবার আপনার দেব পরিবেশের চেয়ে আলাদা সেটিংসের প্রয়োজন কেবলমাত্র:

if(DEBUG):
    #Debug setting
else:
    #Release setting

0

আমি মনে করি এটি সাইটের আকারের উপর নির্ভর করে যে এসকিউএলাইট ব্যবহার থেকে আপনাকে পদক্ষেপ নেওয়া দরকার, আমি বেশ কয়েকটি ছোট লাইভ সাইটগুলিতে সফলভাবে এসকিউএলাইট ব্যবহার করেছি এবং এটি দুর্দান্ত চলছে runs


0

আমি পরিবেশ ব্যবহার করি:

if os.environ.get('WEB_MODE', None) == 'production' :
   from settings_production import *
else :
   from settings_dev import *

আমি বিশ্বাস করি এটি একটি আরও ভাল পদ্ধতির, কারণ শেষ পর্যন্ত আপনার পরীক্ষার পরিবেশের জন্য আপনার বিশেষ সেটিংস প্রয়োজন এবং আপনি সহজেই এই অবস্থাতে এটি যুক্ত করতে পারেন।


0

এটি একটি পুরানো পোস্ট তবে আমি মনে করি আমি যদি libraryএটি দরকারী যুক্ত করি তবে এটি জিনিসগুলিকে সহজ করবে।

জ্যাঙ্গো-কনফিগারেশন ব্যবহার করুন

দ্রুত শুরু

pip install django-configurations

তারপরে অন্তর্ভুক্ত কনফিগারেশনগুলিকে সাবক্লাস করুন your আপনার প্রকল্পের সেটিংসে কনফিগারেশন ক্লাস py

# mysite/settings.py

from configurations import Configuration

class Dev(Configuration):
    DEBUG = True

DJANGO_CONFIGURATIONআপনি সবেমাত্র তৈরি ক্লাসের নামে পরিবেশ পরিবর্তনশীল সেট করুন , যেমন ~/.bashrc:

export DJANGO_CONFIGURATION=Dev

এবং DJANGO_SETTINGS_MODULEযথারীতি মডিউল আমদানি পথের পরিবেশের পরিবর্তনশীল যেমন বাশতে:

export DJANGO_SETTINGS_MODULE=mysite.settings

--configurationজ্যাঙ্গোর ডিফল্ট --settingsকমান্ড লাইন বিকল্পের লাইন ধরে জ্যাঙ্গো ম্যানেজমেন্ট কমান্ড ব্যবহার করার সময় বিকল্প বিকল্প সরবরাহ করুন

python manage.py runserver --settings=mysite.settings --configuration=Dev

জাঙ্গোকে আপনার কনফিগারেশনটি ব্যবহার করতে সক্ষম করতে এখন আপনার স্টার্টার ফাংশনের জ্যাঙ্গো -কনফিগারেশনের সংস্করণ ব্যবহার করার জন্য আপনার ম্যানেজ.পি বা ডাব্লুএসজি.পি স্ক্রিপ্টটি সংশোধন করতে হবে, যেমন জাজানো -কনফিগারেশন ব্যবহার করে একটি সাধারণ ম্যানেজ.পি এইরকম দেখতে পাবেন:

#!/usr/bin/env python

import os
import sys

if __name__ == "__main__":
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
    os.environ.setdefault('DJANGO_CONFIGURATION', 'Dev')

    from configurations.management import execute_from_command_line

    execute_from_command_line(sys.argv)

লাইন 10 এ লক্ষ্য করুন আমরা সাধারণ সরঞ্জামটি ব্যবহার করি না django.core.management.execute_from_command_lineতবে পরিবর্তে configurations.management.execute_from_command_line

আপনার ডাব্লুএসজি.পি ফাইলের ক্ষেত্রে এটি একই প্রযোজ্য , যেমন:

import os

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
os.environ.setdefault('DJANGO_CONFIGURATION', 'Dev')

from configurations.wsgi import get_wsgi_application

application = get_wsgi_application()

এখানে আমরা ডিফল্ট django.core.wsgi.get_wsgi_applicationফাংশনটি ব্যবহার করি না তবে পরিবর্তে configurations.wsgi.get_wsgi_application

এটাই! আপনি এখন আপনার প্রজেক্টটি ম্যানেজ.পি এবং আপনার প্রিয় ডাব্লুএসজিআই সক্ষম সার্ভার দিয়ে ব্যবহার করতে পারেন ।


-2

আসলে আপনার বিকাশ এবং উত্পাদন পরিবেশের জন্য আপনার সম্ভবত একই (বা প্রায় একই) কনফিগার করার বিষয়টি বিবেচনা করা উচিত। অন্যথায়, "আরে, এটি আমার মেশিনে কাজ করে" এর মতো পরিস্থিতি সময়ে সময়ে ঘটবে।

সুতরাং আপনার মোতায়েনটি স্বয়ংক্রিয় করতে এবং সেই ডাব্লুএইচএম সমস্যাগুলি দূর করতে কেবল ডকার ব্যবহার করুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.