একই উউসগি সম্রাটের অধীনে বিভিন্ন পাইথন সংস্করণ?


9

আমি বিভিন্ন ভাসাল সহ একটি উউসগি সম্রাট চালাচ্ছি যা প্রত্যেকে আলাদা আলাদা ভার্চুয়ালেনভের একটি নির্দিষ্ট পাইথন অ্যাপ্লিকেশন সরবরাহ করে। যেহেতু উউসগি এটির নিজস্ব পাইথন ২.7 দোভাষী নিয়ে সংকলিত হয়েছে, পাইথন 3 এর সাথে একটি ভার্চুয়ালেনভ ব্যবহার করার চেষ্টা করছে তাতে ভ্যাসাল.লগের মধ্যে নিম্নলিখিত ত্রুটি তৈরি হয়েছে:

ImportError: No module named site

আমি বিশ্বাস করি যে এই ত্রুটিটির উত্স হ'ল উউসগি তার অন্তর্নির্মিত পাইথন ২.7 দোভাষী ব্যবহার করছেন, যখন যে ভার্চুয়ালেনভ ডিরেক্টরিটি এটি চালাচ্ছে কেবল পাইথন 3 ব্যাখ্যামূলককে সমর্থন করে। আসলে, যখন আমি অন্য উউসগি ব্যবহার করি (কেবল pip install uwsgiএকই ভার্চুয়ালেনভের সাথে এটি ইনস্টল করে ) ত্রুটিটি অদৃশ্য হয়ে যায়। যাইহোক, আমি চাই একজন সম্রাট বিভিন্ন ধরণের ভার্চুয়ালিভেনের উপরে রাজত্ব করুক, সুতরাং প্রত্যেকটিতে পৃথক ইউউজি ইনস্টল করা কোনও বিকল্প নয়।

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

এই মুহূর্তে আমার একটি সম্রাট রয়েছেন যা আমার /etc/rc.local থেকে নিম্নলিখিত সেটিংস সহ শুরু হয়েছে:

[uwsgi]
uid = www-data
gid = www-data
master = true
emperor = /etc/uwsgi/vassals
daemonize = /var/log/uwsgi/emperor.log

তারপরে আমার কাছে এই জাতীয় ফাইল সহ ভ্যাসালগুলির একটি গুচ্ছ রয়েছে:

[uwsgi]
master = false
single-interpreter = true
socket = /tmp/%n.sock
virtualenv = /home/user/.virtualenvs/djangoproject
chdir = /home/user/djangoproject
wsgi-file = project/wsgi.py
logto = /var/log/uwsgi/%n.log

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

plugin = python3.4

এবং অন্যটিতে:

plugin = python2.7

?

একই উউসজি সম্রাটের অধীনে পাইথন ২.7 এবং পাইথন 3 ভার্চুয়াল্লিনভগুলি কীভাবে একত্রিত করবেন তা অনুগ্রহ করে আমাকে অনুগ্রহ করে আমাকে সহায়তা করুন।


আপনি এই অনুচ্ছেদটি অনুসরণ করতে পারেন: uwsgi-docs.readthedocs.org/en/latest/…
রবার্তো

এটিউউজগির জন্য পাইথন ৩.6 প্লাগইন তৈরির কাজে এসেছিল, পাওলোকস.এন.সি.ইউ / ২০১৪ / ২০১৪ / হাউ টু ইউজ- ইউউসগি- উইথপিপিথন ৩--6- ইন- বুন্টু আমি কোন সংস্করণটি ব্যবহার করব তা নির্দিষ্ট করতে সক্ষম হয়েছি প্রতিটি ভাসাল আপনি কোন সংস্করণটি চান তার উপর নির্ভর করে plugins=python3বাplugins=python36
Dfranc3373

উত্তর:


9

ঠিক আছে, যেহেতু আমি প্রতিক্রিয়াগুলিতে একেবারে অভিভূত হইনি, তাই আমি নিজের সাথে সমাধানটি এখানে এনেছি:

প্রথম, আমি পাইথন 3 দোভাষী নিয়ে একটি নতুন ভার্চুয়ালেনভ তৈরি করেছি:

mkvirtualenv -p /usr/bin/python3 python3env

তারপরে আমি পাইপির কাছ থেকে স্টক উউসগি ইনস্টল করেছি, যা পাইথন 3 অনুবাদকের সাথে স্বয়ংক্রিয়ভাবে সংকলিত হয়ে যায়:

pip install uwsgi

আমি একটি কনফিগারেশন ডিরেক্টরি তৈরি করেছি /etc/uwsgi-python3যাতে সম্রাট.আই এবং একটি সাব-ডাইরেক্টরি ভ্যাসাল রয়েছে, যার মধ্যে vassal.ini রয়েছে। অবশেষে, আমি নিম্নলিখিত লাইনটি যুক্ত করেছি/etc/rc.local

/home/user/.virtualenvs/python3env/bin/uwsgi --ini /etc/uwsgi-python3/emperor.ini

এখন একজন উউসগি সম্রাট রয়েছেন যা পাইথন 3 এর অনুবাদককে তার ভাসালগুলির জন্য ব্যবহার করে। এটি ইতিমধ্যে চলমান অন্য অউজগি সম্রাটের সাথে হস্তক্ষেপ করে না এবং পাইথন ২.7 ইন্টারপ্রেটার ব্যবহার করে।

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


বিশ্বব্যাপী uwsgiইনস্টলেশন নিয়ে লড়াই করার পরে , আমি এই পদ্ধতির সাথে চলেছি। চমৎকার ... +1
নিকোরেলিয়াস

@ শেডি: আপনি aশ্বর! আমি জানি যে একটি "ধন্যবাদ!" দিয়ে কোনও মন্তব্য করা উচিত নয় (ইতিমধ্যে upvated), কিন্তু আপনি এটি প্রাপ্য। একক পাইথন প্লাগইনগুলি তৈরির লিঙ্কটি আমার স্থানীয় উবুন্টুতে আমার পক্ষে কার্যকর হয়নি, তবে ভার্চুয়াল পরিবেশে ইনস্টল হওয়া উউসগিটি সঠিক পাইথন সংস্করণ ( ./venv/bin/uwsgi --python-version) সহ চালিত হয় । পারফেক্ট!
taffit

আমি পাই ২.7.১৪ তে ভার্চুয়ালভের সাথে একই সমস্যাটি পাই এবং পাই ২.7.৫ এ বিশ্বব্যাপী ইনস্টল করেছি on আমদানি সাইটের ত্রুটি পাওয়া এখনও তার সমস্ত অজগর
২.

3

অসক্সের নীচে আমি এটি তৈরি করেছি। আমি আমার সিস্টেমে সমস্ত উউসগিটিকে আনইস্টলড করেছি (পিপ থেকে আটকানো ইত্যাদি)।

এর পরে আমি সোর্স কোড / ইউএসআর / স্থানীয় অধীনে ডাউনলোড করেছি

wget https://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar zxvf uwsgi-latest.tar.gz

পরে

cd uwsgi-2.0.17
make PROFILE=nolang

এইভাবে আমি পাইথনের প্লাগিন ছাড়াই একটি এক্সিকিউটেবল তৈরি করেছি।

এর পরে আমি আমার সিস্টেমে প্রতিটি সংস্করণের জন্য প্রতিটি প্লাগইন তৈরি করেছি:

PYTHON=python3.6 ./uwsgi --build-plugin "plugins/python python36"
PYTHON=python2.7 ./uwsgi --build-plugin "plugins/python python27"
PYTHON=python2.6 ./uwsgi --build-plugin "plugins/python python26"

এখন আমার কাছে 3 টি প্লাগইন রয়েছে।

সম্রাটের জন্য আমার আইএনআই ফাইলগুলিতে আমি প্রতিটি ফাইলের জন্য প্লাগইন দির এবং প্লাগইন সংস্করণ নির্দিষ্ট করে দিয়েছি

[uwsgi]
plugins-dir = /usr/local/uwsgi-2.0.17
plugin = python36

[uwsgi]
plugins-dir = /usr/local/uwsgi-2.0.17
plugin = python27

[uwsgi]
plugins-dir = /usr/local/uwsgi-2.0.17
plugin = python26

...

আমি আমার / ইউএসআর / স্থানীয় ফোল্ডারে উউজগি বাইনারি সিমলিংক করেছি

ln -s /usr/local/uwsgi-2.0.17/uwsgi /usr/local/bin/uwsgi

আর চালানোর পরে সম্রাট

uwsgi --emperor /PATH/TO/INI/FILES/FOLDER/

এবং ভয়েলা এখন আমি পাইথন 26, পাইথন 27 এবং পাইথন 36 প্রকল্প এক সাথে চালাতে পারি


সেখানে অনেক সমাধান আছে, কিন্তু এই এক সত্যিই ইস্যু আমি চলমান ছিল মীমাংসিত uwsgiসঙ্গেpython 3.6
Evhz

0

আর একটি সম্ভাব্য সমাধান হ'ল সিস্টেম-প্রশস্ত "সম্রাট" পুনরায় ব্যবহার করা, এবং কেবল নতুন সংস্করণে ভ্যাসালকে বিকল্পযুক্ত করা। এইভাবে আপনার কোনও নতুন ফোল্ডার অন্তর্ভুক্ত করতে /etcবা নতুন পরিষেবাদি চালু করার দরকার নেই rc.local

  1. একটি virtualenv uwsgiমাধ্যমে ইনস্টল করুন pip
  2. /etc/uwsgi/apps-enabled/your-app.iniনিম্নলিখিত হিসাবে সম্পাদনা করুন :

    • plugins=...লাইনটি সরান (কারণ পাইপ-সংকলিত uwsgiপ্লাগইনগুলি সমর্থন করে না)।
    • লাইন যুক্ত করুন:

      unprivileged-binary-patch = /path/to/your/venv/bin/uwsgi
      

      এটি uWSGI সম্রাটকে ভ্যাসাল uwsgiহিসাবে আপনার নিজস্ব বাইনারি চালু করতে বাধ্য করবে ।

  3. সম্রাটে আপনার অ্যাপ্লিকেশনটি পুনরায় লোড করুন service uwsgi restart your-app

শেষ পদক্ষেপটি কারও কারও সাথে সার্ভার পুনরায় আরম্ভ করতে ব্যর্থতার খবর দেয়:

 * Starting app server(s) uwsgi
   ...fail!

যাইহোক, বাস্তবে, নতুন ভ্যাসালটি সূচিত হয় পাশাপাশি অন্যান্য সমস্ত অ্যাপ্লিকেশন starts আমি এটি ডিবাগ করার সময় পাইনি।

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