【发布时间】:2021-10-31 19:41:29
【问题描述】:
我想构建一个更像 Rails 应用程序的 Sinatra 应用程序,结构如下:
.
├── app
│ ├── models
│ │ └── a_model.rb
│ └── views
│ └── a_view.erb
└── app.rb
根据documentation,可以通过覆盖:views设置来完成:
:views-查看模板目录一个字符串,指定视图模板所在的目录。默认情况下,这被假定为应用程序根目录中名为“views”的目录(请参阅
:root设置)。在应用程序的根目录中指定替代目录名称的最佳方法是使用引用:root设置的延迟值:
set :views, Proc.new { File.join(root, "templates") }
我已经设置了:root 和:views:
set :root, File.dirname(__FILE__)
set :views, Proc.new { File.join(root, 'app', 'views') }
# Also tried some variations like:
# set :views, 'app/views/'
# set :views, Proc.new { File.join(setting.root, 'app', 'views' }
# set :public_folder, Proc.new { File.join(root, 'app', 'views' }
# ...
class MyApp < Sinatra::Base
get '/' do
erb :a_view
end
end
但我总是面临同样的错误信息:
No such file or directory @ rb_sysopen - /path/to/my/app/views/a_view.erb
确实,settings.views 被评估为 /path/to/my/app/views(而不是 /path/to/my/app/app/views)
看起来我无法控制:views (settings.views) 变量的值。我知道我可以简单地将视图文件夹移动到根位置。
谁能解释为什么我无法控制这些设置?
【问题讨论】: