سؤال

لقد سمعت عبارة "نشر التطبيقات" التي تبدو أفضل/أسهل/أكثر موثوقية من تحميل الملفات الفردية التي تم تغييرها إلى الخادم، لكنني لا أعرف من أين أبدأ.

لدي تطبيق Zend Framework الخاضع للتحكم في الإصدار (في مستودع Subversion).كيف أقوم "بنشر" طلبي؟ماذا علي أن أفعل إذا كان لدي دليل "التحميلات" ولا أريد استبداله؟

أنا أستضيف طلبي من خلال طرف ثالث، لذلك لا أعرف الكثير غير بروتوكول نقل الملفات (FTP).إذا كان أي من هذا يتضمن تسجيل الدخول إلى الخادم الخاص بي، فيرجى شرح العملية.

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

المحلول

يُعرف النشر التلقائي + تشغيل الاختبارات على خادم مرحلي بالتكامل المستمر.الفكرة هي أنه إذا قمت بتسجيل شيء يخالف الاختبارات، فسيتم إخطارك على الفور.بالنسبة لـ PHP، قد ترغب في الاطلاع عليها زينك أو phpUnderControl

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

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

  • SSH إلى خادم الإنتاج.يتم تنفيذ بقية الأوامر على خادم الإنتاج، من خلال ssh.
  • يجري svn export svn://path/to/repository/tags/RELEASE_VERSION /usr/local/application/releases/TIMESTAMP
  • إيقاف الخدمات (أباتشي، الشياطين)
  • يجري unlink /usr/local/application/current && ln -s /usr/local/application/releases/TIMESTAMP /usr/local/application/current
  • يجري ln -s /usr/local/application/var /usr/local/application/releases/TIMESTAMP/var
  • يجري /usr/local/application/current/scripts/migrate.php
  • بدء الخدمات

(على افتراض أن لديك طلبك في /usr/local/application/current)

نصائح أخرى

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

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

1) هل تصدير من أحدث في الاختيار 2) تصدير تحميل لخادم الإنتاج 3) فك / التكوين تصدير تحميلها حديثا

ولقد أجريت دائما الخطوات الأخيرة يدويا. عموما انها بسيطة مثل SVN التصدير، والرمز البريدي، تحميل، بفك، تكوين، والخطوات الماضيين أنا فقط الاسم المستعار بضع باش أوامر معا لأداء. ثم أنا مبادلة خارج دليل التطبيق الجذر مع واحدة جديدة، وضمان وأظل القديم حول على سبيل الاحتياط، وانها على ما يرام.

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

وهنا مقالة ممتازة على استخدام التخريب لنشر المشاريع على شبكة الإنترنت - أنه يجيب العديد من الأسئلة الخاصة بك

http://athleticsnyc.com/blog/entry/ على استخدام التخريب مقابل مشاريع الويب

وفي شركة WEBDEV بلدي بدأنا مؤخرا باستخدام Webistrano ، وهو واجهة المستخدم الرسومية ويب لشعبية كابيسترانو الأداة.

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

وWebistrano هو في حد ذاته روبي على القضبان التطبيق، الذي تقوم بتثبيته على تطور أو خادم التدريج. يمكنك إضافة مشروع لكل من مواقع الويب الخاصة بك. لكل مشروع إضافة مراحل، مثل همز وديف.

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

عند النقر فوق نشر، Webistrano SSHs إلى الملقم البعيد الخاص بك (ق)، لا على الخروج إس من القانون، وأية مهام أخرى التي تتطلب مثل الهجرات قاعدة البيانات، symlinking أو تنظيف الإصدارات السابقة. كل هذا يمكن أنب بطبيعة الحال، بعد كل شيء، انها ببساطة كتابتها.

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

وهذا النوع من الشيء هو ما يمكن ان نطلق عليه "التكامل المستمر". Atlassian الخيزران (التكلفة)، الشمس هدسون (مجاني) وتحكم أوتوماتيكي للسرعة (مجانا) كلها خيارات شعبية (في ترتيب تفضيل بلدي)، وتقديم الدعم للتعامل مع الانتاج PHPUnit (لدعم PHPUnit الانتاج أداة JUnit).

ويمكن أن يتم الاشياء نشر مع مشغل آخر بناء. مثل بعض الأشخاص الآخرين على هذا الموضوع، وأود أن ممارسة قدر كبير من الحذر قبل القيام النشر المؤتمتة على الإيداع (واختبار مرور).

وتحقق fredistrano، انها استنساخ كابيسترانو يعمل كبيرة (تركيب مربكة أولمرت قليلا ولكن بعد كل شيء تدير كبيرة)

http://code.google.com/p/fredistrano/

للتعامل مع التحميلات، الحل الكلاسيكي هو نقل الدليل الفعلي خارج مساحة الويب الرئيسية، وتركه فقط لإصدار جديد ليتم سحبه (كما أفعل في البرنامج النصي أدناه) ثم استخدام Apache لإعادته إلى "الاسم المستعار" مكان كجزء من الموقع.

Alias /uploads /home/user/uploads/

هناك خيارات أقل أمامك إذا لم يكن لديك قدر كبير من التحكم في الخادم.

لدي برنامج نصي أستخدمه لنشر برنامج نصي معين على مواقع التطوير/المباشرة (كلاهما يعمل على نفس الخادم).

#!/bin/sh

REV=2410
REVDIR=$REV.20090602-1027

REPOSITORY=svn+ssh://topbit@svn.example.com/var/svn/website.com/trunk
IMAGES=$REVDIR/php/i
STATIC1=$REVDIR/anothersite.co.uk

svn export --revision $REV  $REPOSITORY $REVDIR

mkdir -p $REVDIR/tmp/templates_c
chown -R username: $REVDIR
chmod -R 777       $REVDIR/tmp $REVDIR/php/cache/
chown -R nobody:   $REVDIR/tmp $REVDIR/php/cache/ $IMAGES
dos2unix $REVDIR/bin/*sh  $REVDIR/bin/*php
chmod 755 $REVDIR/bin/*sh $REVDIR/bin/*php

# chmod -x all the non-directories in images
find $IMAGES -type f -perm -a+x | xargs -r chmod --quiet -x
find $STATIC1 -type f -perm -a+x | xargs -r chmod --quiet -x

ls -l $IMAGES/* | grep -- "-x"

rm dev && ln -s $REVDIR dev

لقد قمت بوضع رقم المراجعة والتاريخ/الوقت المستخدم لاسم الدليل المسحوب.كما أن chmod الموجود في المنتصف يجعل الأذونات الموجودة على الصور مقبولة لأنها مرتبطة أيضًا بخادم الصور المخصص لدينا.

آخر شيء يحدث هو إعادة ربط الارتباط الرمزي القديم .../website/dev/ بالدليل الذي تم سحبه حديثًا.يحتوي تكوين Apache بعد ذلك على جذر مستند لـ .../website/dev/htdocs/

هناك أيضًا رابط مطابق .../website/live/htdocs/ docroot، ومرة ​​أخرى، يعد "live" رابطًا رمزيًا آخر.هذا هو البرنامج النصي الآخر الذي سيزيل الارتباط الرمزي المباشر ويستبدله بأي شيء يشير إليه المطور.

#!/bin/sh
# remove live, and copy the dir pointed to by dev, to be the live symlink
rm live && cp -d dev live

أنا أقوم فقط بدفع إصدار جديد من الموقع كل بضعة بيانات، لذلك قد لا ترغب في استخدام هذا عدة مرات في اليوم (لن ترغب ذاكرة التخزين المؤقت لـ APC الخاصة بي في وجود أكثر من بضعة إصدارات من الموقع)، ولكن بالنسبة لي ، أجد أن هذا خاليًا من المشكلات إلى حد كبير بالنسبة للنشر الخاص بي.

وبعد مرور 3 سنوات، تعلمت القليل عن أفضل ممارسات النشر.أستخدم حاليًا أداة تسمى Capistrano لأنها سهلة الإعداد والاستخدام، وتتعامل بشكل جيد مع الكثير من الإعدادات الافتراضية.

تبدو أساسيات عملية النشر الآلي كما يلي:

  1. الكود الخاص بك جاهز للإنتاج، لذلك تم وضع علامة عليه مع إصدار الإصدار:v1.0.0
  2. بافتراض أنك قمت بالفعل بتكوين البرنامج النصي للنشر، يمكنك تشغيل البرنامج النصي الخاص بك، مع تحديد العلامة التي أنشأتها للتو.
  3. ينتقل البرنامج النصي SSH إلى خادم الإنتاج الخاص بك والذي يحتوي على بنية الدليل التالية:

    /your-application
        /shared/
            /logs
            /uploads
        /releases/
            /20120917120000
            /20120918120000  <-- latest release of your app
                /app
                /config
                /public
                ...etc
        /current --> symlink to latest release
    
    Your Apache document root should be set to /your-application/current/public
    
  4. يقوم البرنامج النصي بإنشاء دليل جديد في دليل الإصدارات بالتاريخ والوقت الحالي.داخل هذا الدليل، يتم تحديث التعليمات البرمجية الخاصة بك إلى العلامة التي حددتها.

  5. ثم تتم إزالة الارتباط الرمزي الأصلي ويتم إنشاء رابط رمزي جديد، للإشارة إلى الإصدار الأحدث.

الأشياء التي يجب الاحتفاظ بها بين الإصدارات يتم وضعها في الدليل المشترك، ويتم إنشاء الروابط الرمزية لتلك الدلائل المشتركة.

وذلك يعتمد على التطبيق الخاص بك، وكيف الصلبة في الاختبارات.

وأين أنا أعمل كل شيء يحصل دققت في مستودع للمراجعة ومن ثم يتم إطلاق سراحهم.

سوف

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

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

وهناك مشاكل أيضا مع المتفرعة وغيرها مثل الميزات التي تحتاج إلى التعامل معها.

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