【问题标题】:Using erb in database.yml breaks Devise在 database.yml 中使用 erb 会破坏设计
【发布时间】:2014-05-03 00:46:20
【问题描述】:

出于安全目的,我通过 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 这样的视图似乎在寻找用户模型的错误位置。表单因此类错误而中断,其中用户模型似乎没有“电子邮件”属性:

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 hash是一个空hash,@column_names是一个空数组。

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

环境 Rails 3.2.11 设计 2.1.2 守望者 1.2.1

【问题讨论】:

  • 要确保问题出在数据库上,请尝试用用户名(不带 erb)和密码替换 &lt;%= CredentialsManager.get_db_user %&gt;
  • 我做到了,一切正常。
  • 也许问题是你在你的 yml 中调用一个对象?我们在调用 database.yml 时成功使用了&lt;%= ENV['ENVIRONMENT_VAR_NAME'] %&gt;,并且一直有效
  • 不,不是这样。对象被找到、调用并返回正确的凭证。

标签: ruby-on-rails devise


【解决方案1】:

通过将数据库用户名从“asadmin_app”更改为“asadmin”解决了这个问题 不知道为什么设计不喜欢带有下划线的数据库用户名,但对我来说这似乎是某种错误。 Rails itef 和 SQL Server(后备数据库)在用户名中的 _ 没有问题,但是当设计和管理员参与时,有些事情会变得很糟糕。d

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-16
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多