You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows系统下Rails 6中启动带SSL支持的Puma v5.2.2报错:Puma compiled without SSL support (RuntimeError)

解决Windows下Rails 6中Puma启动SSL支持报错的问题

我之前在Windows环境下也碰到过一模一样的问题——明明装了OpenSSL,Puma却始终提示编译时没包含SSL支持。核心原因其实是Windows下gem安装Puma时,默认没自动识别到你的OpenSSL安装路径,导致编译出来的Puma二进制文件缺失SSL模块。下面是亲测有效的解决步骤:

步骤1:重新编译安装Puma并关联OpenSSL

这是解决问题的关键,要让gem安装Puma时能正确找到OpenSSL的头文件和库:

  1. 先确认你的OpenSSL安装路径:64位版本通常是C:\OpenSSL-win64,32位是C:\OpenSSL-win32;如果是RubyInstaller自带的OpenSSL,路径一般是C:\Ruby[你的版本号]-x64\mingw64。
  2. 打开管理员权限的命令提示符,设置环境变量指向OpenSSL:
    # 把路径替换成你实际的OpenSSL安装目录
    set OPENSSL_CONF=C:\OpenSSL-win64\bin\openssl.cfg
    set PATH=C:\OpenSSL-win64\bin;%PATH%
    set PKG_CONFIG_PATH=C:\OpenSSL-win64\lib\pkgconfig
    
  3. 卸载当前的Puma,重新安装并指定OpenSSL路径:
    gem uninstall puma
    # 用bundler管理的话执行bundle install,或者直接指定版本安装
    gem install puma -v 5.2.2 -- --with-openssl-dir=C:\OpenSSL-win64
    

步骤2:修正ssl_bind配置中的verify_mode参数

你的puma.rb里verify_mode: 'none'用了字符串格式,建议换成Ruby符号或者OpenSSL的常量,避免潜在的配置异常:

ssl_bind '0.0.0.0', 3000, { 
  key: 'mykey.key', 
  cert: 'mykey.crt', 
  # 两种写法都可行,用常量更清晰直观
  verify_mode: OpenSSL::SSL::VERIFY_NONE 
  # 也可以写成 verify_mode: :none
}

步骤3:验证启动命令

如果用rails s启动服务器,确保参数格式正确:

rails s -b "ssl://0.0.0.0:3000?key=mykey.key&cert=mykey.crt"

额外注意事项

  • 一定要保证OpenSSL的位数和你的Ruby版本匹配(比如Ruby是64位,就必须装64位的OpenSSL);
  • 如果你的环境是WSL2而非原生Windows,直接在Linux子系统里操作会更顺畅,Puma在Linux环境下对SSL的支持兼容性更好;
  • 你之前尝试Puma 4.x版本也没解决,大概率还是OpenSSL路径没关联对的问题,按步骤1重新编译应该就能搞定。

内容的提问来源于stack exchange,提问作者Luskmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 11:27:38