পাইথন ওয়েব ফ্রেমওয়ার্ক, ডাব্লুএসজিআই এবং সিজিআই কীভাবে একসাথে ফিট হয়


150

আমার একটি ব্লুহোস্ট অ্যাকাউন্ট আছে যেখানে আমি সিজিআই হিসাবে পাইথন স্ক্রিপ্টগুলি চালাতে পারি। আমার ধারণা এটি সহজতম সিজিআই, কারণ চালানোর জন্য আমাকে নিম্নলিখিতগুলি সংজ্ঞায়িত করতে হবে .htaccess:

Options +ExecCGI
AddType text/html py
AddHandler cgi-script .py

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

ডাব্লুএসজিআই , সিজিআই এবং ফ্রেমওয়ার্কগুলি কীভাবে সংযুক্ত রয়েছে? আমি আমার বেসিক সিজিআই কনফিগারেশনটিতে একটি ওয়েব ফ্রেমওয়ার্ক ( ওয়েব.পি বা চেরিপি বলুন ) চালাতে চাইলে আমার কী জানতে হবে, ইনস্টল করতে হবে এবং কী করতে হবে ? কীভাবে ডাব্লুএসজিআই সমর্থন ইনস্টল করবেন?

উত্তর:


242

ডাব্লুএসজিআই, সিজিআই এবং ফ্রেমওয়ার্কগুলি কীভাবে সংযুক্ত রয়েছে?

অ্যাপাচি 80 পোর্ট শুনে listen এটি একটি HTTP অনুরোধ পায়। এটি প্রতিক্রিয়া জানার উপায় খুঁজতে অনুরোধটিকে পার্স করেছে। অ্যাপাচি সাড়া দেওয়ার জন্য অনেক পছন্দ আছে। প্রতিক্রিয়া জানাতে একটি উপায় হ'ল স্ক্রিপ্ট চালানোর জন্য সিজিআই ব্যবহার করা। সাড়া দেওয়ার আরেকটি উপায় হ'ল সহজভাবে একটি ফাইল পরিবেশন করা।

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

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

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

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

আমি আমার বেসিক সিজিআই কনফিগারেশনটিতে একটি ওয়েব ফ্রেমওয়ার্ক (ওয়েব.পি বা চেরিপি বলুন) চালাতে চাইলে আমার কী জানতে / ইনস্টল করতে হবে / করতে হবে?

মনে রাখবেন একটি সাবপ্রসেসের কাঁটাচামচ করা ব্যয়বহুল। এটিকে ঘিরে কাজ করার দুটি উপায় রয়েছে।

  1. এমবেডেড mod_wsgi বা mod_pythonএ্যাপাচি ভিতরে পাইথন এম্বেড; কোন প্রক্রিয়া কাঁটাচামচ করা হয় না। অ্যাপাচি সরাসরি জ্যাঙ্গো অ্যাপ্লিকেশনটি চালায়।

  2. ডেমন mod_wsgi বা mod_fastcgiঅ্যাপাচে ডাব্লুএসজিআই প্রোটোকল ব্যবহার করে একটি পৃথক ডিমন (বা "দীর্ঘ-চলমান প্রক্রিয়া") এর সাথে ইন্টারঅ্যাক্ট করার অনুমতি দেয়। আপনি আপনার দীর্ঘমেয়াদী জ্যাঙ্গো প্রক্রিয়া শুরু করেন, তারপরে আপনি এই প্রক্রিয়াটির সাথে যোগাযোগের জন্য অ্যাপাচের মোড_ফেষ্টগিটি কনফিগার করেন।

নোট যা mod_wsgiউভয় মোডে কাজ করতে পারে: এম্বেড করা বা ডিমন।

আপনি যখন মোড_ফেসটগি পড়েন, আপনি দেখতে পাবেন যে জ্যাঙ্গো মোড_ফেসটগির সরবরাহিত তথ্য থেকে ডাব্লুএসজিআই-সামঞ্জস্যপূর্ণ ইন্টারফেস তৈরি করতে ফ্লপ ব্যবহার করে। পাইপলাইনটি এভাবে কাজ করে।

Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)

জ্যাঙ্গোর বিভিন্ন ইন্টারফেসের জন্য বেশ কয়েকটি "django.core.handlers" রয়েছে।

মোড_ফেসটগির জন্য, জ্যাঙ্গো এমন একটি সরবরাহ করে manage.py runfcgiযা এফএলইপ এবং হ্যান্ডলারের সংহত করে।

Mod_wsgi এর জন্য, এর জন্য একটি মূল হ্যান্ডলার রয়েছে।

কীভাবে ডাব্লুএসজিআই সমর্থন ইনস্টল করবেন?

এই নির্দেশাবলী অনুসরণ করুন।

https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki

পটভূমির জন্য এটি দেখুন

http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index


4
আমি মোড_উজি ইনস্টল করতে পারি না কারণ আমি শেয়ার্ড হোস্টিংয়ে আছি। আমার সমস্ত কিছু এফসিজি সমর্থন। আমি কীভাবে এখনও এর মাধ্যমে ডাব্লুএসজিআই অ্যাপস চালাতে পারি?
এলি বেন্ডারস্কি

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

14
এস। লট, লোকেরা যখন জিজ্ঞাসা করে যে "কে" ভাল ", তার পরিবর্তে কেন কেবল" মোড_উসজি এক্স হিসাবে ভাল, ফাস্টসিগি ওয়াইয়ের পক্ষে ভাল ", এবং যদি ওপিতে আরও নির্দিষ্ট প্রশ্ন থাকে তবে তারা জিজ্ঞাসা করবেন।
গ্রেগ লিন্ড

7
@ গ্রেগ লিন্ড: কেন কেবল "মোড_উজজি এক্স হিসাবে আরও ভাল, ফাস্টস্কিওয়াই ওয়াইয়ের পক্ষে আরও ভাল" নয়? কারণ এটি করা খুব সহজ নয়। এক্স ও ওয়াই সেটের উপাদান হিসাবে এমন কয়েক ডজন অ-কার্যক্ষম মানের গুণক রয়েছে। এগুলির সবগুলি গণনা করা শক্ত। প্রাসঙ্গিক মানের গুণাবলী সম্পর্কে নির্দিষ্ট প্রশ্ন জিজ্ঞাসা করা লোকদের পক্ষে অনেক দূরে।
এসলট

4
কেবলমাত্র নোটের জন্য: সংস্করণ 1.7 থেকে রানফসিগি বিকল্পটি অবচিত করা হয়েছে এবং জ্যাঙ্গো ১.৯-তে ফাস্টসিজিআই সমর্থন সরানো হয়েছে।
ওবু

58

আমি মনে করি ফ্লোরিয়ানের উত্তর "ডাব্লুএসজিআই কি" সম্পর্কে আপনার প্রশ্নের অংশটির জবাব দিয়েছে, বিশেষত আপনি যদি পিইপি পড়েন ।

যতক্ষণ আপনি শেষের দিকে প্রশ্ন উত্থাপন করেছেন:

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

সিজিআই, ফাস্টসিজিআই এবং এসসিজিআই হ'ল ল্যাঙ্গুয়েজ অজোনস্টিক। আপনি পার্ল, পাইথন, সি, বাশ, যা কিছুতেই সিজিআই স্ক্রিপ্ট লিখতে পারেন। সিজিআই সংজ্ঞায়িত করে যে এক্সিকিউটেবলকে ডাকা হবে, ইউআরএল এবং তারপরে কীভাবে ডাকা হবে: আর্গুমেন্ট এবং পরিবেশ। এটি নির্ধারণ করে যে কীভাবে ফেরতের মান ওয়েব সার্ভারে ফেরত পাঠানো উচিত আপনার এক্সিকিউটেবলের কাজ শেষ হয়ে গেলে। প্রকরণগুলি মূলত আরও অনুরোধগুলি পরিচালনা করতে, বিলম্বিতা হ্রাস করতে সক্ষম হবার জন্য অপটিমাইজেশন; প্রাথমিক ধারণাটি একই।

ডাব্লুএসজিআই কেবল পাইথন। একটি ভাষা অজ্ঞেয় প্রোটোকলের পরিবর্তে, একটি স্ট্যান্ডার্ড ফাংশন স্বাক্ষর সংজ্ঞায়িত করা হয়:

def simple_app(environ, start_response):
    """Simplest possible application object"""
    status = '200 OK'
    response_headers = [('Content-type','text/plain')]
    start_response(status, response_headers)
    return ['Hello world!\n']

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

এটি এত দুর্দান্ত হওয়ার কারণটি হ'ল আমরা এইচটিটিপি জিইটি / পোষ্ট থেকে সিজিআইতে পাইথনে রূপান্তর করার অগোছালো পদক্ষেপ এড়াতে পারি এবং আবার বেরিয়ে যাওয়ার পথে। এটি অনেক বেশি সরাসরি, পরিষ্কার এবং দক্ষ সংযোগ।

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

WSGI সমর্থন আছে, আপনি একটি WSGI মডিউল (যেমন ইনস্টল করা আছে করতে হবে mod_wsgi ), অথবা একটি ওয়েব সার্ভার ব্যবহার WSGI সঙ্গে (যেমন সেঁকা CherryPy )। যদি এর মধ্যে দুটিও সম্ভব না হয় তবে আপনি পিইপিতে প্রদত্ত সিজিআই-ডাব্লুএসজিআই ব্রিজটি ব্যবহার করতে পারেন।


3
ডাব্লুএসজিআই ভাষা অজ্ঞেয়বাদী না করা কার মূ ?় ধারণা? তাহলে কি কথা? পাশাপাশি অ্যাথাকে মডিউল হিসাবে পুরো পাইথনটি পুরোপুরি পাঠান।
সালমান ভন আব্বাস

2
@ সালমানপিকে আমি মনে করি এটি কেবল একটি বাণিজ্য বন্ধ। অবশ্যই একটি ভাষা-অজ্ঞাত প্রোটোকল তৈরি করা সহজ নয় যা কেবলমাত্র নির্বাচিত ভাষায় কোনও ফাংশন প্রয়োগ করে ব্যবহার করা যেতে পারে।
ফুনেহে

21

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

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

Flup অন্য উপায় কোন ওয়েবসার্ভার যে কথা বলতে পারেন জন্য WSGI দিয়ে চালানো হয় FCGI , SCGI বা AJP। আমার অভিজ্ঞতা থেকে কেবল এফসিজিআই সত্যিই কাজ করে, এবং এটি অ্যাপাচিতে Mod_fastcgi এর মাধ্যমে ব্যবহার করা যেতে পারে বা আপনি যদি mod_proxy_fcgi দিয়ে একটি পৃথক পাইথন ডিমন চালাতে পারেন ।

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


3
সিজিআই এর উপর ডাব্লুএসজিআই চালানো কি "ফ্লপ" এর জন্য? কীভাবে এই প্রকল্পের সাথে ফ্লপ যুক্ত হয়?
এলি বেন্ডারস্কি

7

আপনি যদি এই স্থানের সমস্ত শর্তাবলী সম্পর্কে অস্পষ্ট হন এবং এটির মুখোমুখি হতে দেন তবে এটি একটি বিভ্রান্তিকর সংক্ষিপ্ত বিবরণযুক্ত, এটি একটি সরকারী পাইথন হাওতো আকারে একটি ভাল ব্যাকগ্রাউন্ড রিডার রয়েছে যা সিজিআই বনাম ফাস্টসিজিআই বনাম ডাব্লুএসজিআই এবং তাই আলোচনা করে অন: http://docs.python.org/howto/webservers.html


2
URL টি পুরানো হয়, আমার মনে হয় আপডেট করা হয় এক: docs.python.org/2.7/howto/webservers.html
Stefaan

দুর্দান্ত উপাদান :) স্বীকৃত উত্তরের পাশাপাশি এই সরকারী ভূমিকাটি পড়তে হবে।
রিক

4

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

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