有没有简单的方法可以在IIS上运行并部署Rails应用?
离线环境IIS部署Rails应用最简方案
前置准备(在与服务器同架构的联网设备上完成)
- 先在和离线服务器操作系统、CPU架构完全一致的联网设备上,安装对应版本的Ruby、Rails运行环境,拉取你的Rails项目代码后执行
bundle install --deployment,将所有依赖gem全部打包到项目的vendor目录下 - 预编译生产环境静态资源:执行
rails assets:precompile RAILS_ENV=production,确认public目录下生成了完整的静态资源文件 - 下载Windows Service Wrapper(WinSW)的单文件exe程序,用于将Puma封装为系统服务,不需要额外依赖
- 将完整的Rails项目目录、WinSW程序、IIS所需的ARR模块、URL Rewrite模块离线安装包统一打包,拷贝到离线服务器
离线服务器配置步骤
第一步:部署Puma本地服务
- 将项目压缩包解压到服务器本地路径,例如
C:\production_rails_app - 在项目根目录新建WinSW配置文件
puma-svc.xml,内容参考如下:
<service> <id>RailsPumaProd</id> <name>Rails Puma Production Service</name> <description>Puma server for production Rails app</description> <executable>C:\production_rails_app\bin\ruby.exe</executable> <arguments>C:\production_rails_app\bin\puma -e production -p 3000</arguments> <logpath>C:\production_rails_app\log</logpath> <onfailure action="restart" delay="10 sec"/> </service>
- 将WinSW的exe文件重命名为
puma-svc.exe,和上述xml文件放在同目录,打开管理员权限CMD进入对应路径,依次执行puma-svc.exe install、puma-svc.exe start完成服务安装启动,本地访问127.0.0.1:3000验证Rails应用正常运行
第二步:配置IIS反向代理
- 先在离线服务器安装提前准备好的ARR、URL Rewrite模块安装包,安装完成后重启IIS管理器
- 新建IIS站点,绑定你需要的访问端口、域名,物理路径指向Rails项目的public目录
- 选中该站点,打开「URL重写」功能,新建反向代理规则:入站目标地址填
127.0.0.1:3000,勾选启用SSL卸载,保存规则后重启IIS站点 - 直接访问IIS绑定的地址即可正常访问Rails应用,静态资源由IIS直接响应,动态请求转发到Puma处理
方案优势
- 所有依赖均提前打包,完全不需要离线服务器连接外网下载任何资源
- 逻辑简单易排查,不需要Docker、HttpPlatformHandler等复杂组件,兼容性更高
- 静态资源走IIS响应,性能优于纯Puma部署
- Puma封装为系统服务,支持开机自启、崩溃自动重启,稳定性有保障
内容的提问来源于stack exchange,提问作者Claudio Scabbia Sepúlveda
相关产品推荐
相关产品推荐

