【问题标题】:Change Sinatra views directory location更改 Sinatra 视图目录位置
【发布时间】: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) 变量的值。我知道我可以简单地将视图文件夹移动到根位置。

谁能解释为什么我无法控制这些设置?

【问题讨论】:

    标签: ruby sinatra


    【解决方案1】:

    类定义中的移动设置所有设置都是从​​ Sinatra::Base 内部继承的

    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
    

    或者

    class MyApp < Sinatra::Base
      configure do
        set :root,  File.dirname(__FILE__)
        set :views, Proc.new { File.join(root, 'app', 'views') }
      end
    
      get '/' do
        erb :a_view
      end
    end
    

    【讨论】:

      猜你喜欢
      • 2011-01-08
      • 2013-01-04
      • 2011-02-13
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多