Можно ли развернуть приложение Rails 5 с ActionCable в Windows?

У меня есть приложение Rails 5, которое я планировал развернуть в Linux, но поскольку нам нужен был доступ к очень специфическому программному обеспечению только для Windows, мне нужно развернуть его на Windows Server 2012 R2. Мой программный стек (или микс) должен был быть Nginx / Puma / Rails / PostgreSQL / Redis. В Windows у меня устанавливается все, кроме Puma, а в документации Rails сказано, что мне нужен Puma для ActionCable.

Как заставить Puma работать в Windows? Я видел и пробовал отрывки из того, что можно попробовать, а также видел и пробовал отрывки о том, чего не следует делать, например о работе в режиме демона, потому что fork () не поддерживается. Есть ли у кого-нибудь повторяющийся набор инструкций о том, как заставить Puma работать в Windows с приложением Rails?

Или, если Puma не работает с Windows, есть ли повторяемая альтернатива для развертывания приложения Rails 5 с ActionCable на хосте Windows Server (например, Windows 2012 R2)?


person Jay Godse    schedule 12.08.2016    source источник


Ответы (1)


Согласно файлу readme со страницы github, следует соблюдать следующие правила: в уме:

  • режим демона не поддерживается. закомментируйте / удалите следующее, если оно есть.

    daemonize false
    
  • Рабочие не работают в Windows, так как она не поддерживает процессы. Мы хотим, чтобы рабочие были «0». Так закомментируйте следующие строки:

    workers 2        # The default is "0"
    preload_app!
    
  • серверные сокеты не работают без проблем при перезапуске, они должны быть закрыты и снова открыты. Эти платформы не имеют возможности передавать дескрипторы в новый процесс, доступный для ruby.

  • Не используйте сокет unix, вместо этого привяжите сервер к «tcp: //». Поэтому закомментируйте любую строку, которая выглядит следующим образом:

    bind 'unix:///var/run/puma.sock'
    bind 'unix:///var/run/puma.sock?umask=0111'
    

    Вместо этого используйте следующее:

    bind "tcp://127.0.0.1:4001"
    # You don't have to if you don't need to specify a port 
    # since the default is "tcp://0.0.0.0:9292"
    
  • Если после запуска сервера rails вы видите ошибку парсинга http (неверный запрос http), попробуйте этот ответ. Если это не сработает, закомментируйте эту строку из config / environment / production.rb или config / environment / production.rb (в зависимости от того, в какой среде вы хотите запустить Puma).

    config.force_ssl = true
    

Вот как может выглядеть файл puma.rb:

worker 0     # Not necessary. The default is "0"    

threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
threads threads_count, threads_count

bind "tcp://127.0.0.1:4001"    # Not necessary. Default is "tcp://0.0.0.0:9292"

environment ENV.fetch("RAILS_ENV") { "development" }

plugin :tmp_restart

Наконец запустите bundle exec puma -C config\puma.rb, и он должен работать.

person dhrubo_moy    schedule 15.08.2016