برای زندگی من نمی توانم بفهمم که چگونه این را درست کنم به درستی کار کنید.
مشکل مشابه آنچه دیگران دارند ، مانند: نحوه شروع مجدد غلتکی خوشه های مخلوط
اما ما به جای 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 دقیقه در دسترس نباشد در حالی که همه چیز در حال بالا آمدن است.
به منظور جابجایی این برنامه به شرح زیر است:
برای رسیدن به این هدف ، من این کار را کردم:
(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 استفاده می کنیم
هر کمکی عالی خواهد بود.
متشکرم.