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

时间:2016-08-12 15:16:07

标签: production-environment windows-server-2012-r2 ruby-on-rails-5 puma actioncable

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

如何让Puma在Windows上运行?我已经看过并尝试过一些可以尝试的片段,我也看过并尝试了不应该做的片段,例如在守护进程模式下运行,因为不支持fork()。有没有人可以通过Rails应用程序获得关于如何让Puma在Windows上工作的可重复的说明?

或者,如果Puma是Windows的非入门者,是否有可重复的替代方法将带有ActionCable的Rails 5应用程序部署到Windows Server主机(例如Windows 2012 R2)?

1 个答案:

答案 0 :(得分:1)

根据github页面中的readme file,请注意以下事项:

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

    daemonize false
    
  • 工作人员无法在Windows中工作,因为它不支持进程。我们希望工人成为" 0"。请注意以下几行:

    workers 2        # The default is "0"
    preload_app!
    
  • 服务器套接字在重启时无法无缝连接,必须关闭并重新打开。这些平台无法将描述符传递给暴露给ruby的新进程。

  • 不要使用unix socket,而是将服务器绑定到" 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请求),请尝试this answer。如果它不起作用,那么从config / environments / production.rb或config / environments / 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,它应该有效。