我在控制器中有此代码
def index
puts Rails.application.credentials.admin_email
if (current_admin && current_admin.email == Rails.application.credentials.admin_email)
#do this
else
#do that
end
end
else分支总是发生。我相信这是因为我没有从加密文件中获取字符串,因为puts行从不打印任何内容。
当我在Rails控制台中键入Rails.application.credentials.admin_email
时,我得到正确的响应,"xxx@xxx.com"
我的config/credentials.yml.enc
文件如下所示:
admin_email: xxx@xxx.com
我还尝试将config/credentials.yml.enc
文件更改为:
development:
admin_email: xxx@xxx.com
并已将代码更改为
puts Rails.application.credentials[:admin_email]
if (current_admin && current_admin.email == Rails.application.credentials[:admin_email]
然后在rails控制台中,使用
得到正确的xxx@xxx.com
Rails.application.credentials[:development][:admin_email]
,但是在运行rails s
时,开发代码仍然没有显示任何内容。
答案 0 :(得分:1)
看起来您可能有错字/复制粘贴错误。
如果您仍然具有以下格式的凭据文件:
development:
admin_email: xxx@xxx.com
然后您应该使用
进行访问Rails.application.credentials.development[:admin_email]
在您的问题中,尽管在“并将代码更改为”下,您仍然使用旧版本:
puts Rails.application.credentials[:admin_email]
if (current_admin && current_admin.email == Rails.application.credentials[:admin_email]
这应该是:
puts Rails.application.credentials.development[:admin_email]
if (current_admin && current_admin.email == Rails.application.credentials.development[:admin_email]
答案 1 :(得分:0)
这是获取特定于环境的凭据的正确方法,这就是为什么使用以下代码获取凭据的原因:-
Rails.application.credentials.admin_email
更多信息,请点击这里 https://github.com/rails/rails/issues/31349