警告:已初始化常量VERIFY_PEER

时间:2013-09-19 09:24:15

标签: ruby-on-rails devise

当我尝试启动服务器时,我收到以下警告:

/Users/sumitkalra1984/MVP/config/initializers/devise.rb:5: warning: already initialized constant VERIFY_PEER   

我的设计文件:

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE if Rails.env.development?  

如何找到已定义常量的位置,以及如何覆盖该定义?

2 个答案:

答案 0 :(得分:8)

虽然我找不到常量初始化的位置,但您可以通过将该行包装在silence_warnings块中来使警告静音。

silence_warnings do
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE unless Rails.env.production?
end

请参阅:http://api.rubyonrails.org/classes/Kernel.html#method-i-silence_warnings

答案 1 :(得分:0)

您可以在调用OpenSSL::SSL.send(:remove_const, :VERIFY_PEER)之前先取消设置常量,然后根据需要进行设置,然后再将其恢复为原始值。这是示例代码from a gist

prev_setting = OpenSSL::SSL.send(:remove_const, :VERIFY_PEER)
OpenSSL::SSL.const_set(:VERIFY_PEER, OpenSSL::SSL::VERIFY_NONE)

# HTTP requests with DISABLED certificate verification go here.

OpenSSL::SSL.send(:remove_const, :VERIFY_PEER)
OpenSSL::SSL.const_set(:VERIFY_PEER, prev_setting)

来源和归因:该解决方案来自a comment by @sameers,涉及Stack Overflow。根据Stack Overflow用户贡献许可政策在CC-BY-SA 4.0下获得许可。作者的主旨被认为是其中的一部分,因为作者在Stack Overflow注释中指出了将其发布的初衷。