কোড পরিবর্তন হওয়ার সাথে সাথে অজগর পুনরায় লোড করা অজগর ফ্লাস্ক অ্যাপ


202

পাইথনের সাথে কীভাবে একটি শালীন ওয়েব অ্যাপ বিকাশ করা যায় তা আমি তদন্ত করছি। যেহেতু আমি চাই না যে কয়েকটি হাই-অর্ডার কাঠামো আমার পথে চলে, তাই আমার পছন্দটি লাইটওয়েট ফ্লাস্ক কাঠামোর উপর পড়ে । সময়টি বলবে যে এটি সঠিক পছন্দ ছিল কিনা।

সুতরাং, এখন আমি Mod_wsgi দিয়ে একটি অ্যাপাচি সার্ভার সেট আপ করেছি এবং আমার পরীক্ষার সাইটটি ভাল চলছে। যাইহোক, আমি আমার তৈরি পাই বা টেম্পলেট ফাইলগুলিতে স্বয়ংক্রিয়ভাবে পুনরায় লোড করে সাইটটিকে বিকাশের রুটিনটি বাড়িয়ে দিতে চাই। আমি দেখতে পাচ্ছি যে সাইটের .wsgi ফাইলটিতে কোনও পরিবর্তন পুনরায় লোডের কারণ ঘটায় (এমনকি অ্যাপাচি কনফিগারেশনের ফাইলটিতে ডাব্লুএসজিআইএসক্রিপ্টরেলোইডিং অন ছাড়াই), তবে আমি এখনও এটি নিজেই উত্সাহিত করতে হবে (অর্থাত্ অতিরিক্ত লাইনব্রোক প্রবেশ করান, সংরক্ষণ করুন)। আমি যখন অ্যাপটির পাই ফাইলগুলি সম্পাদনা করব তখন কীভাবে পুনরায় লোডের কারণ রয়েছে? অথবা, আমি আমার কাছে .ws ফাইলটি সতেজ করে আইডিই ব্যবহার করব বলে আশা করা হচ্ছে?

উত্তর:


228

বর্তমান প্রস্তাবিত উপায় flaskকমান্ড লাইন ইউটিলিটি সহ।

https://flask.palletsprojects.com/en/1.1.x/quickstart/#debug-mode

উদাহরণ:

$ export FLASK_APP=main.py
$ export FLASK_ENV=development
$ flask run

বা এক আদেশে:

$ FLASK_APP=main.py FLASK_ENV=development flask run

আপনি যদি ডিফল্ট ( 5000) যুক্ত --portবিকল্পের চেয়ে আলাদা পোর্ট চান ।

উদাহরণ:

$ FLASK_APP=main.py FLASK_ENV=development flask run --port 8080

আরও বিকল্পের সাথে উপলব্ধ:

$ flask run --help

3
বা পাইথনভ পাইথন ৩.৫-তেও flask runকাজ করে, যেহেতু আপনি pip install flask, ফ্লেস্কে একটি ফ্লাস্ক এক্সিকিউটেবল ফাইলও ইনস্টল করা থাকে venv/bin/
টনিটনি

এটি একটি সহজ সমাধান যা বিকাশের উদ্দেশ্যে ডকারে অনুবাদ করা যেতে পারে। এখানে এই একই সমাধানটি দেখতে পাবেন ।

স্বাভাবিকভাবে কাজ করে তবে এটি কোনও এনটিএফএস পার্টিশনের কোড সহ উবুন্টুতে কাজ করবে বলে মনে হচ্ছে না। কোড নিয়ে কোনও সমস্যা নয় তবে ফ্লাস্কটি সেটআপের পরিবর্তনগুলি স্বীকৃত বলে মনে হচ্ছে না।
সিটিএনরম্যান

210

আপনি যদি পরীক্ষা / দেব পরিবেশ সম্পর্কে কথা বলছেন তবে কেবল ডিবাগ বিকল্পটি ব্যবহার করুন। কোড পরিবর্তন হলে এটি ফ্লাস্ক অ্যাপটি স্বয়ংক্রিয়ভাবে পুনরায় লোড করবে।

app.run(debug=True)

বা, শেল থেকে:

$ export FLASK_DEBUG=1
$ flask run

http://flask.pocoo.org/docs/quickstart/#debug-mode


6
এটি কেবল তখনই কাজ করে যখন আপনি বিল্ট-ইন ডেভলপমেন্ট সার্ভারের মাধ্যমে সাইটটি চালান। তবে এটি ডাব্লুএসজি এর মাধ্যমে অ্যাপাচে চালানোর সময় নয়। এবং আমি জোর দিয়ে বলছি না যে সত্যিই এটি অ্যাপাচি-তে চালানো দরকার, সুতরাং আপনার পরামর্শ অনুসারে এটি করার সঠিক উপায়।
পাসিডে

4
সঠিক। দেব পরিবেশে বিল্ট ইন সার্ভারটি সত্যই ভাল কাজ করে এবং অ্যাপটি পুনরায় লোড করার জন্য আপনাকে চাকাটি পুনর্বিবেচনার প্রয়োজন হবে না। আমি দৃ strongly়ভাবে পরামর্শ দিচ্ছি আপনি কেবলমাত্র দেব-এর জন্য বিল্ট ইন সার্ভারটি ব্যবহার করুন। উদ্দেশ্য। যাইহোক প্রোড ইন, আপনি প্রতিটি কোড পরিবর্তনে অ্যাপটি স্বয়ংক্রিয়ভাবে পুনরায় লোড করতে চান না।
কোডজেক

44

পরীক্ষা / বিকাশের পরিবেশে

ওয়ার্কজেগ ডিবাগারের ইতিমধ্যে একটি 'অটো রিলোড' ফাংশন উপলব্ধ রয়েছে যা নিম্নলিখিতগুলির মধ্যে একটি করে সক্ষম করা যেতে পারে:

app.run(debug=True)

অথবা

app.debug = True

আপনার যদি প্রয়োজন হয় তবে আপনার সমস্ত সেটআপ পরিচালনা করতে আপনি একটি পৃথক কনফিগারেশন ফাইলও ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আমি একটি 'DEBUG = সত্য' বিকল্পের সাহায্যে 'settings.py' ব্যবহার করি। এই ফাইলটি আমদানি করাও সহজ;

app.config.from_object('application.settings')

তবে এটি উত্পাদন পরিবেশের জন্য উপযুক্ত নয়।

উৎপাদন পরিবেশ

ব্যক্তিগতভাবে আমি কয়েকটি পারফরম্যান্সের কারণে কনফিগারেশন বিকল্পের জন্য অ্যাপাচি + মোড_উজগির চেয়ে এনগিনেক্স + ইউডাব্লুএসজিআই বেছে নিয়েছি। স্পর্শ-রিলোড বিকল্প আপনি যে uWSGI অ্যাপ্লিকেশনের দ্বারা আপনাকে আপনার সদ্য মোতায়েন বোতল অ্যাপ্লিকেশন পুনরায় লোড করার কারণ হবে একটি ফাইল / ফোল্ডার নির্দিষ্ট করার অনুমতি দেয়।

উদাহরণস্বরূপ, আপনার আপডেট স্ক্রিপ্টটি আপনার সর্বশেষতম পরিবর্তনগুলি নীচে টেনে নিয়ে যায় এবং 'পুনরায় লোড_মে. টেক্সট' ফাইলটি স্পর্শ করে। আপনার uWSGI ini স্ক্রিপ্ট (যা সুপারভাইজার দ্বারা রাখা রয়েছে - স্পষ্টতই) কোথাও এই লাইনটি রয়েছে:

touch-reload = '/opt/virtual_environments/application/reload_me.txt'

আশা করি এটা কাজে লাগবে!


1
দুর্দান্ত টিপ জন্য ধন্যবাদ। আমি এটাকে কিছুটা সরলীকৃত করেছি। কার্যকর করার সময় নিজেকে স্পর্শ করে এমন একটি বাশ স্ক্রিপ্ট তৈরি করুন। আপনি যখন পুনরায় লোড চান তখন আপনাকে কেবল এটি চালু করতে হবে। আমার সমাধান: # touch_me_and_reload.sh $ 0 স্পর্শ
Jabba

@Ewan। টাচ-লোড লাইনটি কোথায় থাকার কথা? [প্রোগ্রাম: uwsig] বিভাগ বা [সুপারভাইজার] বিভাগ?
ব্যবহারকারী 805981

@ ব্যবহারকারী 805981- না, একটি পৃথক uwsgi কনফিগারেশন .iniফাইল। আপনি যদি "টাচ-লোড" সংক্রান্ত ডকুমেন্টেশনটি uWSGI তে থাকেন তবে তত্ত্বাবধায়ক নয়, কনফিগারেশন।
ইভান

এর জন্য ধন্যবাদ. app.run(debug=True)ব্যর্থ হয়, তবে পরিবেশগত পরিবর্তনশীল কাজগুলি সেট করে।
আরি

23

আপনি যদি উউজি ব্যবহার করে চালাচ্ছেন তবে অজগরটি পুনরায় লোড বিকল্পটি দেখুন:

uwsgi --py-autoreload 1

উদাহরণস্বরূপ uwsgi-dev-example.ini:

[uwsgi]
socket = 127.0.0.1:5000
master = true
virtualenv = /Users/xxxx/.virtualenvs/sites_env
chdir = /Users/xxx/site_root
module = site_module:register_debug_server()
callable = app
uid = myuser
chmod-socket = 660
log-date = true
workers = 1
py-autoreload = 1

site_root / __ init__.py

def register_debug_server():
    from werkzeug.debug import DebuggedApplication

    app = Flask(__name__)
    app.debug = True
    app = DebuggedApplication(app, evalex=True)
    return app

তারপরে চালান:

uwsgi --ini uwsgi-dev-example.ini

দ্রষ্টব্য: এই উদাহরণটি ডিবাগারকে সক্ষম করে।

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


16

ফ্ল্যাস্ক ০.০ এবং এর উপরে কিছু আপডেট

গরম পুনরায় লোডিংয়ের প্রাথমিক পদ্ধতিটি হ'ল:

$ export FLASK_APP=my_application
$ export FLASK_ENV=development
$ flask run

export FLASK_ENV=developmentআমার জন্য কাজ। app.run(debug=True)কাজ করে না।
অ্যালেক্স

3

আমি একটি ভিন্ন ধারণা পেয়েছিলাম:

প্রথম:

pip install python-dotenv

python-dotenvমডিউলটি ইনস্টল করুন , যা আপনার প্রকল্পের পরিবেশের জন্য স্থানীয় পছন্দ পড়বে।

দ্বিতীয়ত:

.flaskenvআপনার প্রকল্প ডিরেক্টরিতে ফাইল যুক্ত করুন । নিম্নলিখিত কোড যুক্ত করুন:

FLASK_ENV=development

হয়ে গেল!

আপনার ফ্লাস্ক প্রকল্পের জন্য এই কনফিগারেশনের সাহায্যে আপনি যখন রান করবেন flask runএবং আপনি এই টার্মিনালে এই আউটপুটটি দেখতে পাবেন:

এখানে চিত্র বর্ণনা লিখুন

এবং আপনি যখন নিজের ফাইলটি সম্পাদনা করবেন তখন পরিবর্তনটি সংরক্ষণ করুন। আপনি দেখতে পাবেন অটো-লোড আপনার জন্য রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

আরও ব্যাখ্যা সহ:

export FLASK_ENV=developmentআপনার প্রয়োজনমতো অবশ্যই ম্যানুয়ালি আঘাত করতে পারেন । তবে প্রকৃত কাজের পরিবেশটি পরিচালনা করতে বিভিন্ন কনফিগারেশন ফাইল ব্যবহার করা আরও ভাল সমাধান বলে মনে হচ্ছে, তাই আমি এই পদ্ধতিটি আমি দৃ strongly়ভাবে ব্যবহার করি recommend


পারফেক্ট! এছাড়াও, FLASK_APPভেরিয়েবলটি .flaskenvফাইলের মধ্যে অন্তর্ভুক্ত করতে ভুলবেন না ।
সিকুইয়েল

2

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

ডিফল্টরূপে, ডিবাগ মোড অক্ষম করা হয়। এটি সক্ষম করতে, FLASK_DEBUG=1ফ্লাস্ক চালানোর আগে পরিবেশের পরিবর্তনশীল সেট করুন run:

(venv) $ export FLASK_APP=hello.py for Windows use > set FLASK_APP=hello.py

(venv) $ export FLASK_DEBUG=1 for Windows use > set FLASK_DEBUG=1

(venv) $ flask run

* Serving Flask app "hello"
* Forcing debug mode on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 273-181-528

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


1

পাইচার্মে এটি অর্জনের জন্য 'পরিবেশ পরিবর্তনশীল' বিভাগটি এতে সেট করুন:

PYTHONUNBUFFERED=1;
FLASK_DEBUG=1

ফ্লাস্কের জন্য 'রান / ডিবাগ কনফিগারেশন'।


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