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

Sinatra修改views目录位置配置不生效问题咨询

问题根本原因

你采用的是Sinatra的模块化开发模式(自定义类继承Sinatra::Base),而你把set配置项写在了自定义应用类的外部,这类全局配置只会作用于Sinatra默认的经典模式全局应用实例,完全不会对你自己定义的MyApp子类生效,所以你改的配置根本没被加载,类内部还是用的默认views路径规则。

修复方案

把所有配置项移动到MyApp类内部即可,正确代码如下:

class MyApp < Sinatra::Base
  # 所有配置要写在类内部
  set :root,  File.dirname(__FILE__)
  set :views, Proc.new { File.join(root, 'app', 'views') }

  get '/' do
    erb :a_view
  end
end

另外补充两个你之前写变体时的注意点:

  • 之前的Proc.new { File.join(setting.root, 'app', 'views' }写法有语法错误,括号未闭合,会直接抛出语法异常
  • public_folder对应的是静态资源目录,不要和视图目录views搞混

如果你是用config.ru启动的话,确保你run的是你自己写的MyApp类而不是默认的Sinatra应用:

# config.ru 示例
require './app'
run MyApp

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 04:18:02