【发布时间】: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)和密码替换
<%= CredentialsManager.get_db_user %>。 -
我做到了,一切正常。
-
也许问题是你在你的 yml 中调用一个对象?我们在调用 database.yml 时成功使用了
<%= ENV['ENVIRONMENT_VAR_NAME'] %>,并且一直有效 -
不,不是这样。对象被找到、调用并返回正确的凭证。
标签: ruby-on-rails devise