Что данные (если таковые имеются) сохраняют через веб-запросы в Ruby on Rails?

Я решил использовать одноэлементный шаблон разработки при создании класса помощника представления. Это получило меня взгляды; одноэлементный экземпляр выживет через запросы? Это привело к другому вопросу, Который переменные (если таковые имеются) переживают через веб-запросы, и это изменяется в зависимости от развертывания? (Fastcgi, Полукровка, Пассажир...)

Я знаю, что переменные Экземпляра контроллера не сохраняются. Я знаю, что Константы сохраняются (или перезагружаются?). Но я не знаю о переменных класса, переменных экземпляра на классе, Eigenclasses...

18
задан Daniel Beardsley 7 May 2010 в 19:14
поделиться

2 ответа

Простой ответ - нет. Каждый запрос рассматривается как независимое событие, и никакая информация о состоянии не переносится отдельно от того, что хранится в сеансе пользователя и любых внешних базах данных, кэшах или хранилищах файлов. Лучше всего, чтобы вы разрабатывали свое приложение с учетом этого и не ожидали, что вещи будут сохраняться только потому, что вы их установили.

Более сложная история заключается в том, что некоторые вещи сохраняются. Например, можно создать переменную класса на контроллере, и она будет переноситься из одного запроса в другой, как и следовало ожидать.Загвоздка в том, что это относится только к единственному экземпляру этого контроллера, как содержится в этом процессе, и не будет применяться к запросам, обслуживаемым другими процессами. Если вам нужно кэширование, используйте инфраструктуру Rails.cache и избегайте взлома в своей собственной.

Типичная производственная среда — это сложная, постоянно меняющаяся вещь, где процессы создаются и разрушаются постоянно, и нет никакого способа заранее определить, какой процесс в конечном итоге будет обслуживать конкретный запрос. Поскольку многие развертывания включают не только несколько процессов на одном компьютере, но и несколько машин, на самом деле нет практического способа создания однопроцесных объектов в масштабах всего приложения.

Лучшее, что вы можете сделать, это построить слой поверх механизма кэширования, где ваш объект синглтона является просто оболочкой для функций, которые извлекает и записывают из кэша. Это создает видимость однотонного объекта при сохранении межпроцессной согласованности.

18
ответ дан 30 November 2019 в 09:21
поделиться

Интернет является средой без гражданства. Если вы намеренно не сохраняете данные в сеансе или не передаете их в get или post, каждый веб-запрос начинается с чистого листа. Все объекты, созданные с помощью текущего запроса, уничтожаются после доставки страницы в веб-браузер.

-4
ответ дан 30 November 2019 в 09:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: