0

我正在尝试在一个简单的 sinatra 应用程序中设置sinatra-authentication gem,并遇到了 sinatra 找不到正确视图的问题。我知道 sinatra-authentication 默认使用 haml,但我在这个应用程序中使用 erb。

考虑到这一点,我在 sinatra-authenticaiton 文档中发现有一个设置允许您更改模板引擎,方法是将以下内容添加到您的应用程序文件中:

   configure do
       set :template_engine, :erb # for example
   end

我已将此添加到我的 app.rb 文件中,当我尝试在我的应用程序中点击 /signup 路由时,sinatra 仍在寻找 signup.haml。

几点注意事项:

  1. 我已将 gem 包含在我的 Gemfile 中,并成功在我的应用程序上运行捆绑安装。

     source 'https://rubygems.org'
    
     gem 'sinatra'
     gem 'data_mapper'
    
     gem 'pg'
     gem 'dm-postgres-adapter'
     gem 'sinatra-authentication'
    
  2. 我在文档中看到一些内容表明我可能需要指定视图文件的位置,因此我将以下内容添加到我的配置块中。

    set :sinatra_authentication_view_path, Pathname(__FILE__).dirname.expand_path + "views/"
    
  3. **我想我已经通过添加在我的应用文件中准确地需要 gem

    require "sinatra-authentication"
    
    use Rack::Session::Cookie, :secret => 'mys3cr3tk3y'
    

这个要点是我的 app.rb 文件在我的 sinatra 应用程序根目录中的当前表示。 https://gist.github.com/rriggin/5378641#file-gistfile1-txt

这是 sinatra 抛出的错误截图:http: //cl.ly/image/0y041t0K3u3O

当我在本地运行应用程序时,会按预期在我的本地数据库中创建一个“dm-users”表。

为了让 sinatra-authentication 正确查找 erb 模板而不是 haml 文件,我是否缺少另一个配置设置。任何帮助将不胜感激。

谢谢

4

1 回答 1

0

规范没有测试 template_engine 设置是否有效,并且查看设置的调用方式,我认为它不正确,即

send settings.template_engine, get_view_as_string("index.#{settings.template_engine}"), :layout => use_layout? 

可能会更好地工作:

send app.settings.template_engine, get_view_as_string("index.#{app.settings.template_engine}"), :layout => use_layout?

我是这么认为的。如果您 fork 项目,更改该行并将其添加到您的 Gemfile并且它可以工作,然后考虑为其编写一个快速规范,您将改进该项目的主线并解决您的问题。

于 2013-04-13T19:08:41.473 回答