Приложението Rails 3, работещо на Nginx и Unicorn в производство, не се актуализира

Имам малко странен проблем с моето лично приложение за релси.

Вече повече от година го изпълнявам на VPS, използвайки Nginx, Unicorn и RVM, не съм най-добрият с производствените настройки, но исках да започна да ставам по-добър в това, така че последвах Railscast на Ryan Bates по темата тук Изглеждаше, че работи много добре от дълго време, но наскоро аз Забелязах, че за да накарам началната страница да се опреснява, когато се добавят нови статии, трябва да убия процесите на еднорога и след това да рестартирам еднорога.

Някой друг срещал ли е този проблем? Ако е така, как да го поправя?


person Lee Richmond    schedule 30.09.2013    source източник


Отговори (2)


Нов отговор:

Въз основа на вашите коментари, това най-вероятно не е проблем с Unicorn / Nginx, а просто проблем с Rails, който превключва между разработка и производство. Опитайте да стартирате сайта си локално, но в производствен режим.

Най-вероятно имате кешове, които трябва да бъдат издухани всеки път, когато някой публикува нова статия. Ако получавате много трафик, ще искате да кеширате, но забравянето да нулирате кеша може да причини проблема, който виждате.

Стар отговор:

Използвате ли капистрано? Има набор от рецепти за използване на еднорог с капистрано. Те имат задача за презареждане на еднорога:

https://github.com/sosedoff/capistrano-unicorn/blob/master/lib/capistrano-unicorn/capistrano_integration.rb#L103

Това се споменава в документите:

http://unicorn.bogomips.org/SIGNALS.html

HUP - презарежда конфигурационния файл и грациозно рестартира всички работници. Ако директивата „preload_app“ е false (по подразбиране), тогава работниците също ще вземат всички промени в кода на приложението при рестартиране. Ако „preload_app“ е вярно, тогава промените в кода на приложението няма да имат ефект; USR2 + QUIT (вижте по-долу) трябва да се използва за зареждане на по-нов код в този случай. При презареждане на приложението, Gem.refresh ще бъде извикан, така че актуализираният код за вашето приложение да може да вземе новоинсталираните RubyGems. Не се препоръчва да деинсталирате библиотеки, от които зависи вашето приложение, докато Unicorn работи, тъй като повторно създадените работници може да влязат в цикъл на генериране, когато не успеят да заредят деинсталирана зависимост.

person Farley Knight    schedule 30.09.2013
comment
Съжалявам, вероятно не бях ясен в първия си пост, приложението е сайт в стил списание и проблемът възниква всеки път, когато аз или някой друг публикува статия, по някаква причина статиите се запазват добре, но началната страница (която показва най-новите статии) не се актуализира. - person Lee Richmond; 30.09.2013
comment
Това звучи като нещо свързано с вашето приложение, а не с Nginx / Unicorn. - person Farley Knight; 30.09.2013

Трябваше да отговоря на това много по-рано, но ме отклониха, проблемът ми се оказа, че имах имена на обхвати, които се опитваха да проверят спрямо текущата дата, но докато правех Time.now в модела текущата дата беше винаги различно от очакваното преминаване на текущата дата/час от контролера в обхвата работи перфектно.

person Lee Richmond    schedule 30.01.2014