在cPanel上部署Ruby 3.2应用遇请求路由异常求助
cPanel Ruby应用请求未由Sinatra处理,静态文件被自动路由
环境与文件结构
- Ruby版本:3.2,通过cPanel部署,应用主目录为
ruby.myDomain.co.uk - 主目录文件:
config.ru、app.rb(无HTML文件) - 子目录
/public:包含index.html、fish.html两个静态文件
操作步骤与异常现象
- 按cPanel指引激活Ruby环境的命令:
source /home/myDomain/rubyvenv/ruby.myDomain.co.uk/3.2/bin/activate - 激活环境前执行
ps aux的进程列表:USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND myDomain 4075531 0.7 0.0 230360 4188 pts/0 S 04:43 0:00 /bin/bash -l myDomain 4075646 0.0 0.0 262612 2176 pts/0 R+ 04:43 0:00 ps aux - 浏览器访问行为:
- 访问
https://www.ruby.myDomain.co.uk/,返回ruby.myDomain.co.uk/public/index.html - 访问
https://www.ruby.myDomain.co.uk/fish.html,返回ruby.myDomain.co.uk/public/fish.html - 预期行为:根路径显示目录列表,访问
fish.html返回404
- 访问
- 激活Ruby环境后,
ps aux无新增进程(仅终端提示符变化),访问现象不变 - 执行
ruby app.rb启动Sinatra应用,输出如下:
此时另一个终端执行I, [2024-08-28T05:17:13.427851 #4181457] INFO -- : Loaded app.rb using /home/myDomain/ruby.myDomain.co.uk/public /home/myDomain/rubyvenv/ruby.myDomain.co.uk/3.2/gems/sinatra-4.0.0/lib/sinatra/base.rb:1849: warning: Rack::Logger is deprecated and will be removed in Rack 3.2. [2024-08-28 05:02:42] INFO WEBrick 1.8.1 [2024-08-28 05:02:42] INFO ruby 3.2.4 (2024-04-23) [x86_64-linux] == Sinatra (v4.0.0) has taken the stage on 4567 for development with backup from WEBrick ===== Booting up app.rb ===== [2024-08-28 05:02:42] INFO WEBrick::HTTPServer#start: pid=4118877 port=4567ps aux可见Sinatra进程:
但浏览器访问仍无请求日志输出,静态文件依旧被自动路由,现象未改变。USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND myDomain 4075531 0.0 0.0 230360 4392 pts/0 S 04:43 0:00 /bin/bash -l myDomain 4118877 0.3 0.0 384520 37380 pts/0 S+ 05:02 0:00 /opt/alt/ruby32/bin/ruby app.rb myDomain 4138701 0.5 0.0 230360 4324 pts/2 S 05:05 0:00 /bin/bash -l myDomain 4138801 0.0 0.0 262612 2220 pts/2 R+ 05:05 0:00 ps aux
app.rb代码
require 'sinatra' require 'logger' logger = Logger.new(STDOUT, level: Logger::INFO) logger.info "Loaded app.rb using #{settings.public_folder}" get '/' do logger.info "Serving index.html for request: #{request.path_info}" send_file File.join(settings.public_folder, 'index.html') end on_start do puts "===== Booting up app.rb =====" end on_stop do puts "===== Shutting down =====" end
核心疑问
- 无法确定哪个进程在处理浏览器请求,请求显然未到达本地启动的Sinatra应用(无日志输出)
- 静态文件被自动路由到
/public目录,与预期行为不符
内容的提问来源于stack exchange,提问作者perplexed
相关产品推荐
相关产品推荐

