كيفية نشر إلى ملقم معين واحد باستخدام كابيسترانو

StackOverflow https://stackoverflow.com/questions/429816

سؤال

ولدي النظام في إنتاج يحتوي على العديد من الخوادم في عدة أدوار. وأود أن اختبار ملقم التطبيق الجديد من خلال نشر هذا الخادم معين، دون الحاجة إلى إعادة نشر إلى كل ملقم في الإنتاج. هل هناك وسيلة لطرح كابيسترانو لنشر إلى خادم معين؟ ومن الناحية المثالية أود أن تكون قادرة على تشغيل شيء من هذا القبيل

cap SERVER=app2.example.com ROLE=app production deploy

وإذا أردت فقط لنشر لapp2.example.com.

وشكرا!

[التحديث] حاولت الحل المقترح من قبل وولونغ عن طريق تنفيذ:

cap HOSTS=app2.server.hostname ROLE=app qa deploy 

ولكن كابيسترانو يبدو أن محاولة تنفيذ مهام أدوار أخرى على ذلك الملقم بالإضافة إلى المهام التطبيق. ربما كنت بحاجة إلى تحديث نسختي من قبعة (أنا على التوالي V2.2.0)؟

هل كانت مفيدة؟

المحلول

وانتهى بي الأمر نشر سؤال على لائحة المستخدمين كابيسترانو هنا ، وحصلت على الرد التالي من خميس (تحرير قليلا من قبلي هنا لوضوح):


وحاول متغير معادل البيئة:

cap HOSTS=app2.example.com production deploy

لاحظ أن القيام بذلك سوف علاج APP2 كما يجري في كل دور، وليس فقط أيهما دور (ق) يحدث أن أعلن في.

إذا ما كنت أريده هو أن تفعل نشر العادية، ولكن تعمل فقط على APP2، و فقط كما هو أعلن APP2 في ملف وصفتك، يمكنك استخدام HOSTFILTER المتغير بدلا من ذلك:

cap HOSTFILTER=app2.example.com production deploy 

[...]

وجرب هذا المثال الملموس. لنفترض أن لديك يحدد النصي ثلاثة خوادم، A، B، C. ووأنها تحدد مهمة، "فو"، أن (افتراضيا) يريد أن تعمل على ألف وباء، ولكن ليس C. مثل هذا:

role :app, "A", "B"
role :web, "C"

task :foo, :roles => :app do
  run "echo hello"
end

والآن، إذا كنت تفعل cap foo، فستعمل الأمر صدى على كل من A و B.

إذا كنت لا cap HOSTS=C foo، فستعمل الأمر صدى على C، بغض النظر عن: دور المعلمة لهذه المهمة

.

إذا كنت لا cap HOSTFILTER=C foo، وسوف يتم تشغيل الأمر صدى في قبل كل شيء، لأن تقاطع (A B) و (C) هو مجموعة فارغة. (هناك لا توجد المضيفين في قائمة المضيف فو التي تطابق C).

إذا كنت لا cap HOSTFILTER=A foo، فستعمل الأمر صدى على فقط A، لأن (A B) تتقاطع مع (A) هو (A).

وأخيرا، إذا كنت تفعل cap HOSTFILTER=A,B,C foo، فستعمل صدى أمر على ألف وباء (ولكن ليس C)، لأن (A B) تتقاطع مع (A B C) هو (A B).

لتلخيص: معادل يتجاوز تماما إعلان المضيفين أو الأدوار من هذه المهمة، وقوات كل شيء لخوض الانتخابات ضد المضيف المحدد (ق). وHOSTFILTER، من ناحية أخرى، لمجرد تصفية المضيفين القائمة ضد قائمة معينة، واختيار فقط تلك الملقمات التي هي بالفعل في خادم قائمة المهام.

نصائح أخرى

ويجب أن تعمل من خارج منطقة الجزاء التالية:

cap HOSTS=app2.example.com ROLE=app deploy

إذا كنت ترغب في نشر ل> الخادم 1 مع نفس الدور:

cap HOSTS=app2.example.com,app3.example.com,app4.example.com ROLE=app deploy

ولدي مشكلة مماثلة وحاول ما يلي: يعمل:

cap production ROLES=web HOSTS=machine1 stats

ويجب أن تكون قادرة على القيام بشيء من هذا القبيل في deploy.rb:

task :production do
  if ENV['SERVER'] && ENV['ROLE']
    role ENV['ROLE'], ENV['SERVER']
  else
    # your full config
  end
end

ويمكنك أيضا specifiy المضيفين على مستوى المهمة المعلمة بهذه الطريقة:

task :ship_artifacts, :hosts => ENV['DEST_HOST']  do

end 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top