خطأ في النسيج: خطأ فادح: محلي () واجه خطأ (رمز الإرجاع 2) أثناء تنفيذ رسالة "GIT Comment -m"
سؤال
أحاول إعداد FabFile لنشر تطبيق Django الخاص بي.
لا أستطيع معرفة سبب تلقي هذا الخطأ:
خطأ فادح: محلي () واجه خطأ (رمز الإرجاع 2) أثناء تنفيذ إعدادات "Git Comment -m" التي تم تغييرها ل ProdServer "
$ fab create_branch_deploy_to_prodserver
[localhost] run: git checkout prodserver_server
[localhost] run: git merge master
[localhost] run: cp settings_prodserver.py settings.py
[localhost] run: git add settings.py
[localhost] run: git commit -m 'changed settings for prodserver'
Fatal error: local() encountered an error (return code 1) while executing 'git commit -m 'changed settings for prodserver''
Aborting.
هنا إذا كانت وظيفة النسيج:
def create_branch_deploy_to_prodserver():
local("git checkout prodserver_server")
local("git merge master")
local('cp settings_prodserver.py settings.py') #
#local('git rm fabfile.py') #This is also creating error so it's commented out
local('git add settings.py')
local("git commit -m 'changed settings for prodserver'")
هل من الممكن جعل جيت ارتكاب من النسيج؟
المحلول
تمكنت من تشخيص المشكلة عندما أضفت التقاط = خطأ إلى الإعلان:
local('git rm fabfile.py', capture=False)
local('git add settings.py', capture=False)
سمح هذا الخطأ المراد عرضه بشكل أكبر.
على ما يبدو، سيعود المشرفون للنسيج للعودة local
السلوك مرة أخرى لعدم التقاط افتراضيا، في 1.0.
نصائح أخرى
هل هذه مشكلة متعلقة بثثون مثل تلك الموصوفة في هذا الموضوع?
المشكلة الرئيسية مع هذا هو أن
stdout
/stderr
الاستيلاء على التحذير في المدى / السودو وليس لكل مهمة.سيكون رائعا إذا كنت تستطيع أن تشرح لي كيف يمكنني جمع انتاجو خطأ فقط تعديل الملف يسمى
fabfile_runner.py
.
من المؤدلة أن تكون مهمة النسيج نفسها غير ضرورية، سيسمح ذلك بتحميل المصنع نفس الملف الذي تم اختباره يدويا.تحقق من مصدر النسيج والنظر في مجلد "الاختبارات"، وتحديدا اختبارات / Utils.py. أنه يحتوي على ديكور واحد،
@mock_streams
, ، والتي هي قادرة على التخلص من الوظيفة (أي وظيفة في أي رمز بيثون - أنها ليست محددة من القماش، كما ذكرت) وإعادة توجيهsys.stdout
و / أوsys.stderr
للالتقاط / الفحص.إنه مصمم للاستخدام حول الوظائف، كونه ديكور، حتى تتمكن من استخدامه مباشرة عن طريق تعديل الخاص بك
fabfile_runner.py
مثل ذلك:
fabfile_runner.py.
from StringIO import StringIO
import sys
from test_fabfile import hello_world
def execute(task):
output = StringIO()
error = StringIO()
sys.stdout = output
sys.stderr = error
task()
sys.stdout = sys.__stdout__
sys.stderr = sys.__stderr__
return (output.getvalue(), error.getvalue())
output, error = execute(hello_world)
print "output : %s" %output
print "error : %s" %error