Hyperstack — это изоморфная структура, в которой один и тот же код может выполняться на стороне сервера или клиента. Таким образом, есть определенные случаи, когда в зависимости от того, где выполняется некоторый фрагмент кода (на стороне сервера или на стороне клиента), должны выполняться разные вещи (синхронизация клиента и т. д.).
Проблема в том, что, полагаясь на проверку по умолчанию, если
defined?(Rails::Server)
зависит от используемого вами веб-сервера и окружающей среды.
Например, я работаю на puma (в докере для разработки и на сервере Ubuntu для производства), и даже в этом случае определено? (Rails::Server) отлично работает в разработке, но не в производстве. Это показывает, что обнаружение выполнения сервера зависит не только от фактического сервера, на котором вы работаете, но и от метода, используемого для его запуска (например, запуск rails s VS puma)
Дополнительную информацию можно найти здесь:
Определить, запущено ли приложение как HTTP-сервер или нет (rake task, rconsole и т. д.)
https://gitter.im/ruby-hyperloop/chat?at=59d60f2201110b72317cd61c
https://hyperstack-org.slack.com/archives/CHRQ5U8HL/p1557262851049900
Существует ли стандартный способ проверить, выполняется ли что-то в Rails в процессе/потоке сервера (не в браузере, в каком-то клиенте, консоли, миграции, задаче rake и т. д.), не полагаясь на какой-либо хак, чтобы определить или объявить, какой сервер мы развернуть на (puma, thin, nginx и т. д.)?