Production environment 可以在Windows上部署带有ActionCable的Rails 5应用程序吗?

Production environment 可以在Windows上部署带有ActionCable的Rails 5应用程序吗?,production-environment,windows-server-2012-r2,ruby-on-rails-5,puma,actioncable,Production Environment,Windows Server 2012 R2,Ruby On Rails 5,Puma,Actioncable,我有一个Rails 5应用程序,我计划将其部署在Linux上,但因为我们需要一些访问非常特定的Windows only软件,所以我需要将其部署在Windows Server 2012 R2上。我的软件堆栈(或混合)应该是Nginx/Puma/Rails/PostgreSQL/Redis。除了Puma,我的所有东西都安装在Windows上,Rails文档说我需要Puma用于ActionCable 如何让Puma在Windows上运行?我已经看到并尝试了一些要尝试的东西,也看到并尝试了一些关于不应该

我有一个Rails 5应用程序,我计划将其部署在Linux上,但因为我们需要一些访问非常特定的Windows only软件,所以我需要将其部署在Windows Server 2012 R2上。我的软件堆栈(或混合)应该是Nginx/Puma/Rails/PostgreSQL/Redis。除了Puma,我的所有东西都安装在Windows上,Rails文档说我需要Puma用于ActionCable

如何让Puma在Windows上运行?我已经看到并尝试了一些要尝试的东西,也看到并尝试了一些关于不应该做什么的东西,比如在守护进程模式下运行,因为不支持fork()。有没有人对如何让Puma在Windows上使用Rails应用程序有一套可重复的说明

或者,如果Puma不是Windows的初学者,是否有可重复的替代方案来将带有ActionCable的Rails 5应用程序部署到Windows服务器主机(例如Windows 2012 R2)?

根据来自github页面的,请记住以下事项:

  • 不支持守护程序模式。因此,如果有这样的行,请注释掉/删除以下内容

    daemonize false
    
  • Worker不在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'
    
    相反,请使用以下命令:

  • 如果在启动rails服务器后看到任何http解析错误(格式错误的http请求),请尝试。如果它不起作用,则从config/environments/production.rb或config/environments/production.rb(取决于要运行Puma的环境)注释掉这一行

以下是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
,它应该可以工作

config.force_ssl = true
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