راه اندازی مجدد Nginx برنامه Rails با کپسترانو

برای زندگی من نمی توانم بفهمم که چگونه این را درست کنم به درستی کار کنید.

مشکل مشابه آنچه دیگران دارند ، مانند: نحوه شروع مجدد غلتکی خوشه های مخلوط

اما ما به جای Mongrel از Nginx / Passenger استفاده می کنیم.

مسئله این است که اگر از این استاندارد استفاده کنیم روی یک deploy است: restart task:

task :restart, :roles => [:app], :except => {:no_release => true} do
  run "cd #{deploy_to}/current && touch tmp/restart.txt"
end

این فایل restart.txt را در سرورهای وب لمس می کند ، اما هر نمونه مسافری که در حال حاضر درخواست را ارائه می دهد باید قبل از اینکه درخواست جدید ایجاد شود به پایان برسد ، به نظر می رسد . این تأخیر جدی ایجاد می کند و باعث می شود که برنامه ما حداکثر تا 2 دقیقه در دسترس نباشد در حالی که همه چیز در حال بالا آمدن است.

به منظور جابجایی این برنامه به شرح زیر است:

  1. کد را نصب کنید
  2. ادامه دهید به سرور 1 ، آن را از تعادل بار خارج کنید
  3. راه اندازی مجدد nginx-مسافر بر روی سرور 1
  4. 60 ثانیه صبر کنید
  5. اضافه کردن سرور 1 به بارگیری تعادل
  6. رفتن به سرور 2 (مراحل تکرار 3 - 5)

برای رسیدن به این هدف ، من این کار را کردم:

(lb.txt فایلی است که متعادل کننده بار به دنبال آن است)

task :restart, :roles => [:app], :except => {:no_release => true} do
  servers = find_servers_for_task(current_task)
  servers.map do |s|
    run "cd #{deploy_to}/current && echo '' > public/lb.txt", :host => s.host
    run %Q{rvmsudo /etc/init.d/nginx-passenger restart > /dev/null}, :host => s.host
    sleep 60
    run "cd #{deploy_to}/current && echo 'ok' > public/lb.txt", :host => s.host
  end
end

این تقریباً کار می کند ، با این حال ، به نظر می رسید که در هنگام استقرار هر بار در سرورهای ذکر شده در نقش برنامه ، از طریق سرورها حلقه کنید. در حال حاضر 6 سرور برنامه داریم ، بنابراین حلقه 6 بار اجرا می شود ، nginx-مسافر 6 بار در هر سرور راه اندازی مجدد می شود.

من فقط برای اجرای یک بار به این حلقه احتیاج دارم.

دوباره شروع می شود ، اما به نظر نمی رسد که هنوز وجود داشته باشند.

اگر به ما کمک کند ، ما از Capistrano 2.x و Rails 3 استفاده می کنیم

هر کمکی عالی خواهد بود.

متشکرم.

8
задан Community 23 May 2017 в 10:31
поделиться