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
相关产品推荐
相关产品推荐

