我有一个 Rails 5 应用程序,我计划将其部署在 Linux 上,但由于我们需要一些访问非常特定的仅限 Windows 的软件,因此我需要将其部署在 Windows Server 2012 R2 上。我的软件堆栈(或组合)应该是 Nginx/Puma/Rails/PostgreSQL/Redis。除了 Puma 之外,所有内容都可以在 Windows 上安装,并且 Rails 文档说我需要 Puma for ActionCable。
如何让 Puma 在 Windows 上运行?我已经看到并尝试了一些要尝试的事情的片段,我也看到并尝试了关于不该做的事情的片段,例如因为不支持 fork() 而在守护进程模式下运行。有没有人有一套可重复的说明,说明如何让 Puma 使用 Rails 应用程序在 Windows 上工作?
或者,如果 Puma 不适用于 Windows,是否有可重复的替代方案来使用 ActionCable 将 Rails 5 应用程序部署到 Windows Server 主机(例如 Windows 2012 R2)?
根据自述文件 https://github.com/puma/puma/blob/master/README.md从 github 页面来看,需要记住以下几点:
-
不支持守护进程模式。因此,如果有这样的行,请注释掉/删除以下内容。
daemonize false
-
Workers 不在 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 请求),请尝试这个答案 https://stackoverflow.com/a/28388372/5715870。如果它不起作用,请从 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
它应该有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)