के माध्यम से सर्वर पर वर्चुअलएन्व को सक्रिय करने में समस्या मैं अपने स्टेजिंग सर्वर पर फैब्रिक के माध्यम से कुछ Django प्रबंधन आदेश चलाने की कोशिश कर रहा हूं।फैब्रिक
समस्या यह है कि ऐसा लगता है कि फैब्रिक वर्चुअलएन्व को सक्रिय करने में सक्षम नहीं है और इस प्रकार कमांड निष्पादित करते समय सिस्टम पायथन/libs का उपयोग करने में सक्षम नहीं है।
सर्वर पर Django अनुप्रयोग एक virtualenv का उपयोग कर चलाया जाता है (नहीं, मैं 'डॉन virtualenvwrapper का उपयोग अभी तक ...)
कपड़ा (1.0.1) एक आदेश का उपयोग करते हुए इस प्रकार दिखाई देंगे जब मेरे बॉक्स से चलाने :
fabfile विधि:
def collectstatic():
require('settings', provided_by=[production, staging])
with settings(warn_only=True):
run('source %(env_path)s/bin/activate && python %(repo_path)s/%(project_name)s/configs/%(settings)s/manage.py collectstatic --noinput -v0' % env)
उत्पादन:
$ fab staging master collectstatic
[myserver.no] Executing task 'master'
[myserver.no] Executing task 'collectstatic'
[myserver.no] run: source /home/newsapps/sites/mysite/env/bin/activate && python /home/newsapps/sites/mysite/repository/mysite/configs/staging/manage.py collectstatic --noinput -v0
[myserver.no] Login password:
[myserver.no] out: Unknown command: 'collectstatic'
[myserver.no] out: Type 'manage.py help' for usage.
मुझे पता है कि Django कमांड संग्रहित 1.3 से पहले के संस्करणों में मौजूद नहीं है जो सोचता है कि सिस्टम पायथन (जिसमें Django 1.2 है) का उपयोग किया जा रहा है।
मेरे fabfile/परियोजना लेआउट great fabfile of the Tribapps guys
पर आधारित है तो मैं pythonversion परीक्षण करने के लिए एक कपड़े विधि बनाया:
def pythonver():
require('settings', provided_by=[production, staging])
with settings(warn_only=True):
run('source %(env_path)s/bin/activate && echo "import sys; print sys.path" | python ' % env)
जब चलाने यह निम्न उत्पादन देता है:
$ fab staging master pythonver
[myserver.no] Executing task 'master'
[myserver.no] Executing task 'pythonver'
[myserver.no] run: source /home/newsapps/sites/mysite/env/bin/activate && echo "import sys; print sys.path" | python
[myserver.no] Login password:
[myserver.no] out: ['', '/usr/lib/python2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/python2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/lib/python2.6/dist-packages', '/usr/lib/pymodules/python2.6', '/usr/lib/pymodules/python2.6/gtk-2.0',
जैसा कि आप देख सकते हैं कि यह सिस्टम पायथन का उपयोग करता है और नहीं मेरा वर्चुअलनव घर/न्यूज़एप/साइट्स/माइसाइट/एनवी
में स्थित नहीं है 210लेकिन अगर मैं सर्वर
source /home/newsapps/sites/mysite/env/bin/activate && echo "import sys; print sys.path" | python
पर सीधे इस आदेश चला .. तो यह virtualenv से सही पथ आउटपुट
मैं गलत क्या कर रहा हूँ के बाद से आदेशों से अजगर के साथ नहीं चल रहे हैं फैब्रिक का उपयोग कर मेरे वर्चुअलएन्व?
मैं अपने virtualenv के postactivate फ़ाइल में (जैसे अपने प्रोजेक्ट की रूट निर्देशिका के रूप में) मेरी अतिरिक्त PYTHONPATH प्रविष्टियों को जोड़ने कर रहा हूँ। मुझे लगता है कि यह विधि उसमें शामिल नहीं है।क्या मुझे इन जगहों को कहीं और रखना चाहिए? – PKKid
आप अपने/lib/python2.x/साइट-पैकेज/'निर्देशिका में' .pth' फ़ाइलें जोड़ सकते हैं। इनमें एक पथ हो सकता है जिसे आपके 'पायथनपथ' में जोड़ा जाएगा। मैं इसे अपनी तैनाती प्रक्रिया के हिस्से के रूप में करता हूं। –
या, आप अपनी प्रोजेक्ट को एक इंस्टॉल करने योग्य पैकेज में बना सकते हैं (इसे 'setup.py' फ़ाइल दें), और इसे' pip -e' का उपयोग करके इंस्टॉल करें, जो वही काम करता है। –