2

Могу ли я утверждать, что приложения rails/sinatra инициализируются только один раз, и все запросы используют одно и то же приложение экземпляра? или новые запросы порождают новые экземпляры приложений?Sinatra/Rails: Сохранение экземпляров пользовательских классов во время жизни приложения

Можно ли использовать пользовательские классы и сохранять их в течение жизни приложения без использования сеансов, хранилищ баз данных или сторонних служб? Если да, то каковы последствия с точки зрения безопасности потоков?

Я пытаюсь понять, как реализовать веб-менеджер загрузки, и в настоящее время я оцениваю рамки на основе Ruby.

ответ

2

Могу ли я утверждать рельсы/Sinatra приложения являются инициализируется только один раз, и все запросы разделяют один и тот же экземпляр приложения? или делать новые запрашивает новые экземпляры приложений?

В целом. Это действительно зависит от вашей настройки. Если вы выполняете только процесс с сервером (aka Rack handler), который повторно использует один и тот же объект приложения, это будет работать. Используется ли тот же экземпляр вашего приложения, зависит от используемой вами веб-структуры. Например, Sinatra создает новый экземпляр вашего класса приложения (обычно Sinatra::Application) для каждого запроса, если он используется как конечная точка Rack.

Можно ли, например пользовательские классов и сохраняются их во время приложения жизни без использования сессий, хранилищ баз данных или сторонних услуги третьей? Если да, то каковы последствия с точки зрения безопасности потоков ?

Если вы действительно хотите продолжать занятия, вам, вероятно, понадобится что-то вроде maglev. Однако, я считаю, вы имеете в виду постоянные экземпляры пользовательских классов. Если вы не хотите использовать базу данных для сохранения (вы действительно должны), вы можете вернуться к PStore, который поставляется с Ruby.

+0

Это довольно шокирующая информация о Синатре. Я просматриваю всю информацию о том, как заставить Sinatra не открывать новое соединение db при каждом запросе. Неужели Синатра ошибается? – mjnissim

+0

Почему это шокирует? Rails также создает новый экземпляр контроллера для каждого запроса. Просто не храните DB-соединение в качестве переменной экземпляра. Вы можете сделать «set: db, DB.connect (...)», а затем получить доступ к нему как «settings.db» с маршрута, например. –

Смежные вопросы