如何设置sinatra认证使用erb而不是haml



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

考虑到这一点,我在sinatra- authentication文档中发现,有一个设置允许你改变模板引擎,通过添加以下内容到你的应用程序文件:

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

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

注意事项:

  1. 我已经在我的Gemfile中包含了这个gem,并成功地在我的应用上运行了一个bundle install。

     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'
    

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

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

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

是否有另一个配置设置,我错过了为了得到sinatra身份验证,以正确地寻找动词模板,而不是haml文件。任何帮助都将非常感激。

谢谢

规格没有测试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?

我就是这么想的。如果你分叉了这个项目,改变了代码行并把它添加到你的Gemfile中,它就可以工作了,那么考虑为它写一个快速的规范,你就可以改进这个项目的主线,同时也解决了你的问题。

最新更新