Я решил использовать одноэлементный шаблон разработки при создании класса помощника представления. Это получило меня взгляды; одноэлементный экземпляр выживет через запросы? Это привело к другому вопросу, Который переменные (если таковые имеются) переживают через веб-запросы, и это изменяется в зависимости от развертывания? (Fastcgi, Полукровка, Пассажир...)
Я знаю, что переменные Экземпляра контроллера не сохраняются. Я знаю, что Константы сохраняются (или перезагружаются?). Но я не знаю о переменных класса, переменных экземпляра на классе, Eigenclasses...
Простой ответ - нет. Каждый запрос рассматривается как независимое событие, и никакая информация о состоянии не переносится отдельно от того, что хранится в сеансе пользователя и любых внешних базах данных, кэшах или хранилищах файлов. Лучше всего, чтобы вы разрабатывали свое приложение с учетом этого и не ожидали, что вещи будут сохраняться только потому, что вы их установили.
Более сложная история заключается в том, что некоторые вещи сохраняются. Например, можно создать переменную класса на контроллере, и она будет переноситься из одного запроса в другой, как и следовало ожидать.Загвоздка в том, что это относится только к единственному экземпляру этого контроллера, как содержится в этом процессе, и не будет применяться к запросам, обслуживаемым другими процессами. Если вам нужно кэширование, используйте инфраструктуру Rails.cache и избегайте взлома в своей собственной.
Типичная производственная среда — это сложная, постоянно меняющаяся вещь, где процессы создаются и разрушаются постоянно, и нет никакого способа заранее определить, какой процесс в конечном итоге будет обслуживать конкретный запрос. Поскольку многие развертывания включают не только несколько процессов на одном компьютере, но и несколько машин, на самом деле нет практического способа создания однопроцесных объектов в масштабах всего приложения.
Лучшее, что вы можете сделать, это построить слой поверх механизма кэширования, где ваш объект синглтона является просто оболочкой для функций, которые извлекает и записывают из кэша. Это создает видимость однотонного объекта при сохранении межпроцессной согласованности.
Интернет является средой без гражданства. Если вы намеренно не сохраняете данные в сеансе или не передаете их в get или post, каждый веб-запрос начинается с чистого листа. Все объекты, созданные с помощью текущего запроса, уничтожаются после доставки страницы в веб-браузер.