У меня есть 2 сервера с балансировкой нагрузки с помощью ELB. На каждом сервере есть копия одного и того же приложения rails с nginx впереди и единорогом в качестве сервера приложений.
Нет файла css, который сейчас загружается в окне браузера. Когда я проверяю Element, я вижу, что он ищет, скажем, application-123123.css
который находится на ДРУГОМ сервере.
Итак, похоже, что браузер получает сервер 1, загружает его html, который имеет application-123123123.css
предварительно скомпилированный на нем. затем, когда фактический вызов загрузки application-123123123.css
отправляется, он переходит на СЕРВЕР 2, у которого есть собственная метка времени (из-за отсутствия лучшего слова) и ошибки, потому что файл для application-123123123.css
не существует.
Я не понимаю, что такое Duck duck go fodder и что искать в настройках nginx / appserver. Мысли?
Есть два способа исправить это. Первый - заставить ваше приложение вести себя так, чтобы независимо от того, на какой сервер попадает запрос, оно знало, что от него просят. Это предпочтительное и наиболее надежное решение, но оно во многом зависит от вашего приложения и от того, как оно собирает свои статические файлы в место, которое может видеть nginx, и делает это таким образом, который согласован между запусками. Я не разработчик рельсов, поэтому не могу говорить о том, что вам нужно сделать, чтобы правильно сбалансировать нагрузку. Распространенный способ борьбы с перебором кеша заключается не в использовании метки времени, в которую был сгенерирован файл, а скорее в каком-то хэше содержимого самого файла. Если файл не изменится, хеш не изменится, и хеш будет генерироваться согласованно на всех серверах, независимо от того, изменился файл или нет.
Второй - включить «липкие сеансы» на вашем балансировщике нагрузки, что позволит пользователю указывать на один и тот же сервер до тех пор, пока липкий файл cookie остается в его браузере или истекает. Однако опасность, стоящая за этим, заключается в том, что если сервер, на котором они «застряли», уходит (из-за ручного или временного / нагрузочного разрушения), то пользователь может столкнуться с некоторыми проблемами, если серверы ведут себя немного иначе, чем друг друга. Вам нужно будет изучить свое приложение более подробно, чтобы полностью понять, на что здесь повлияет, если что-то произойдет.