如何在找不到带有' id' =的文章时如何防止Rails显示个人信息

时间:2017-09-24 06:35:16

标签: ruby-on-rails ruby

我很久以前就完成了本指南http://guides.rubyonrails.org/getting_started.html的大部分内容。

我设置了一个文章控制器,当我创建一篇新文章时,会生成一个新的数字,例如

https://www.zzz.com/articles/1
https://www.zzz.com/articles/2
https://www.zzz.com/articles/3

我刚注意到,如果我输入一个不存在的数字,我会收到错误消息

 ActiveRecord::RecordNotFound in ArticlesController#show 

然后它会显示我不希望别人看到的信息,例如

Rails.root: /home/myname/myapp

如何显示404错误?

我尝试过将类似的内容添加到应用程序控制器中,但它没有帮助:

class ApplicationController < ActionController::Base
  rescue_from ActiveRecord::RecordNotFound, :with => :render_404
  # Render 404 page when record not found
    def render_404      
       render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
    end
end

我目前正在开发模式而非生产模式下运行。那有关系吗?

2 个答案:

答案 0 :(得分:3)

是的,您必须以development模式而不是production运行。因为在development应用程序中,其他默认值和尝试都经过优化,例如通过显示错误消息来帮助开发人员。

production中的默认值与生产服务器上运行的应用程序不同并进行了优化:应用程序运行速度更快,不会向浏览器发送错误消息。

如果您想测试该行为,可以在consider_all_requests_localconfig/environments/development.rb中设置false的内容(请参阅Rails docs about configuration)。这会禁止向浏览器发送调试信息。

但是,我建议在production环境中的服务器上运行应用程序。

答案 1 :(得分:0)

正如spickermann已经指出的那样,它确实很重要。

原因是consider_all_requests_local配置的设置决定了错误消息显示的信息量。在development模式下,此设置在true false时设为production

如果您想事先看到production中的内容会改变相应的设置

# Show full error reports and disable caching.
config.consider_all_requests_local       = true
config/environments/development.rb

中的