Какой самый точный способ проверить, участвуете ли вы в работе сервера rails для нужд Hyperstack? - PullRequest
0 голосов
/ 08 мая 2019

Hyperstack - это изоморфная структура, в которой один и тот же код может выполняться на стороне сервера или клиента.Таким образом, существуют конкретные случаи, когда в зависимости от того, где выполняется какой-то фрагмент кода (на стороне сервера или клиента), должны выполняться разные вещи (синхронизация клиента и т. Д.).

Проблема заключается в том, что при проверке по умолчанию используется

defined?(Rails::Server) 

зависит от используемого веб-сервера и окружающей среды.

Например, я работаю на Puma (в докере для разработки и на сервере Ubuntu для работы) и даже в этом случае определяется? (Rails :: Server) отлично работает в разработке, но не в производстве.Это показывает, что обнаружение выполнения сервера зависит не только от фактического сервера, на котором вы работаете, но также и от метода, используемого для его запуска (запуск ex-rails s VS puma)

Дополнительную информацию можно найти здесь:

  1. Определить, было ли приложение запущено как HTTP-сервер или нет (задача rake, rconsole и т. Д.)

  2. https://gitter.im/ruby-hyperloop/chat?at=59d60f2201110b72317cd61c

  3. https://hyperstack -org.slack.com / archives / CHRQ5U8HL / p1557262851049900

Существует ли стандартный способ проверить, что-то вRails запускает на сервере процесс / поток (не в браузере, не в каком-то виде клиент, консоль, миграцию, задачу rake и т. Д.), Не полагаясь на какой-то хак, чтобы определить или объявить, на каком сервере мы развертываем (puma, thin, nginx и т. Д.).)

1 Ответ

0 голосов
/ 16 мая 2019

Вы можете использовать защиту RUBY_ENGINE, чтобы увидеть, работает ли код в Opal.

if RUBY_ENGINE == 'opal'
    # I am on the client
end

Это очень полезно в ваших изоморфных моделях, чтобы исключить части методов модели из существующих на клиенте.,Также очень полезно для использования добавленных методов Gem, которые не имеют смысла в клиентском коде.

...