Windows IIS服务器部署Ruby On Rails应用故障求助
排查Windows IIS部署Rails应用的问题
以下是针对你当前配置的具体排查和修复步骤:
1. 优先查看错误日志
你的web.config已经开启了stdout日志,路径为log\rails.log,先到C:\inetpub\wwwroot\test\bmw_test_project\log目录下查看这个日志文件,里面会包含Puma启动或运行时的具体错误信息,这是定位问题最直接的方式。如果log目录不存在,手动创建它,并确保IIS应用池账户有该目录的写入权限。
2. 修正web.config的启动命令
直接用ruby -S puma可能没有加载项目的Gem依赖(本地运行时你是在项目目录下通过bundle管理依赖的),建议修改web.config中的processPath和arguments,改用bundle来启动Puma:
<httpPlatform stdoutLogEnabled="true" processesPerApplication="1" stdoutLogFile="log/rails.log" startupTimeLimit="60" processPath="C:\Ruby31-x64\bin\bundle.exe" arguments="exec puma --env development --dir C:\inetpub\wwwroot\test\bmw_test_project -p %HTTP_PLATFORM_PORT%"> <environmentVariables> <environmentVariable name="RAILS_ENV" value="development" /> <environmentVariable name="RAILS_SERVE_STATIC_FILES" value="true" /> </environmentVariables> </httpPlatform>
- 把
processPath改为bundle.exe的路径,确保通过bundle加载项目专属的gem依赖 - 添加
RAILS_SERVE_STATIC_FILES环境变量:Rails 7默认在开发环境不主动提供静态文件,这个变量可以让Puma处理静态资源请求 - 延长
startupTimeLimit到60秒,避免因依赖加载慢导致启动超时
3. 检查服务器上的项目依赖
在服务器上打开命令提示符,进入项目目录C:\inetpub\wwwroot\test\bmw_test_project,执行以下命令:
bundle install
确保所有Gem依赖都已正确安装,没有报错。如果使用SQLite数据库,还要确认sqlite3 gem是否安装成功,以及数据库文件(db/development.sqlite3)的权限是否允许IIS账户读取和写入。
4. 配置IIS应用池权限
- 打开IIS管理器,找到你的站点对应的应用池,将其
.NET CLR版本设置为无托管代码 - 给应用池身份(默认是
IIS AppPool\DefaultAppPool)添加以下权限:- 项目目录
C:\inetpub\wwwroot\test\bmw_test_project的读取、写入、列出文件夹内容权限(tmp、log目录需要写入权限) - Ruby安装目录
C:\Ruby31-x64的读取权限
- 项目目录
5. 测试Puma独立启动
在服务器的项目目录下,手动执行启动命令:
bundle exec puma -p 3000 --env development
如果这个命令能正常启动Puma并访问http://localhost:3000,说明项目本身没问题,问题出在IIS的配置或权限上;如果启动失败,根据控制台的错误信息修复(比如缺失依赖、数据库配置错误等)。
内容的提问来源于stack exchange,提问作者Vishal Aher
相关产品推荐
相关产品推荐

