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

У меня немного странная проблема с моим личным приложением rails.

Уже больше года я запускаю его на VPS с использованием Nginx, Unicorn и RVM, я не лучший в настройке продакшена, но хотел начать улучшать его, поэтому я следил за Railscast Райана Бейтса по этому вопросу здесь Казалось, что это работает очень хорошо в течение долгого времени, но недавно я Я заметил, что для того, чтобы домашняя страница обновлялась при добавлении новых статей, мне нужно убить процессы Unicorn, а затем перезапустить unicorn.

Кто-нибудь еще сталкивался с этой проблемой? Если да, то как мне исправить это?


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» равно true, то изменения кода приложения не будут иметь никакого эффекта; В этом случае для загрузки нового кода необходимо использовать 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