2

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

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

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

ответ

1

Согласно readme file со страницы GitHub, следующие вещи, чтобы иметь в виду:

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

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

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

  • Не используйте сокет 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" 
    
  • Если вы заметили ошибку HTTP синтаксического анализа (запрос уродливы HTTP) после запуска сервера рельсы, попробуйте this answer. Если он не работает, то закомментируйте эту строку из конфигурации/сред/production.rb или конфигурации/сред/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 и он должен работать.