在database.yml中使用erb打破了Devise

时间:2014-05-03 00:46:20

标签: ruby-on-rails devise

我更新了database.yml,以便出于安全目的从文件中获取凭据,并通过erb调用将其替换为从文件中读取信息的对象。

当涉及到身份验证时,这似乎工作正常,但是当设计生成的视图似乎中断时。

这个版本的database.yml打破了它:

development:
  adapter: sqlserver
  host: my_server.xxx.rds.amazonaws.com
  port: 1433
  database: MyDatabase 
  username: <%= CredentialsManager.get_db_user %>
  password: <%= CredentialsManager.get_db_pass %> 

但是控制台和不调用身份验证的页面访问模型属性没有问题。

然而,像devise / sessions / new.html.erb这样的视图似乎在寻找User模型的错误位置。表单中断包含这些错误,其中用户模型似乎没有“email”属性:

Processing by Devise::SessionsController#new as HTML
  Rendered devise/sessions/new.html.erb within layouts/application (6.0ms)
Completed 500 Internal Server Error in 18ms

ActionView::Template::Error (undefined method `email' for #<User >):
    3: <%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %>
    4:     <div><%= f.label :email %>
    5:       <br/>
    6:       <%= f.email_field :email %></div>
    7: 
    8:     <div><%= f.label :password %>
    9:       <br/>
  app/views/devise/sessions/new.html.erb:6:in `block in _app_views_devise_sessions_new_html_erb__882742671_47657856'
  app/views/devise/sessions/new.html.erb:3:in `_app_views_devise_sessions_new_html_erb__882742671_47657856'


  Rendered C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.11/lib/action_dispatch/middleware/templates/rescues/_trace.erb (1.0ms)
  Rendered C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.11/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
  Rendered C:/Ruby193/lib/ruby/gems/1.9.1/gems/actionpack-3.2.11/lib/action_dispatch/middleware/templates/rescues/template_error.erb within rescues/layout (16.0ms)

检查| f |调试器中的参数显示它具有类User的@object属性,但@object的@attributes散列是空散列,而@column_names是空数组。

有没有人知道如何解决这个问题?我需要从database.yml中获取凭据,这就是我想要的方式。

环境Rails 3.2.11             设计2.1.2             守望者1.2.1

1 个答案:

答案 0 :(得分:0)

通过将数据库用户名从“asadmin_app”更改为“asadmin”来解决此问题 不知道为什么设计不喜欢带有下划线的db用户名,但它似乎对我来说是某种错误。 Rails itsef和SQL Server(后备数据库)在用户名中对_没有任何问题,但是当设计和warden得到涉及时,soemthing变得棘手。