我目前正在使用JRuby Mail-2.6.0模块中的猴子补丁。具体来说,我想修补ssl_context
类方法。如果有帮助,这是module的完整路径。
我对猴子补丁的一个问题是,由于我想要替换一个类方法,我不太清楚用什么方法来替换ssl_context
。
这就是我对猴子补丁的看法:
require 'mail/check_delivery_params'
class << Mail::SMTP
remove_method :ssl_context
end
module Mail
class SMTP
# Allow SSL context to be configured via settings, for Ruby >= 1.9
# Just returns openssl verify mode for Ruby 1.8.x
def ssl_context
openssl_verify_mode = settings[:openssl_verify_mode]
if openssl_verify_mode.kind_of?(String)
openssl_verify_mode = "OpenSSL::SSL::VERIFY_#{openssl_verify_mode.upcase}".constantize
end
# context = Net::SMTP.default_ssl_context
context = OpenSSL::SSL::SSLContext.new(settings[:ssl_version])
context.verify_mode = openssl_verify_mode
context.ca_path = settings[:ca_path] if settings[:ca_path]
context.ca_file = settings[:ca_file] if settings[:ca_file]
context
end
end
end
我基本上只想改变:
context = Net::SMTP.default_ssl_context
要:
context = OpenSSL::SSL::SSLContext.new(settings[:ssl_version])
我已尝试undef_method
,remove_class_variable
和remove_method
,但仍然遇到以下类型的错误:
2017-05-17 11:44:03.423 -0700 [ERROR|007d0|main] :: Error starting Application: Undefined method ssl_context for 'Mail::SMTP'
org/jruby/RubyModule.java:2826:in `undef_method'
/Users/App/Code/yourtool/lib/helltool/mailer.rb:328:in `singleton class'
/Users/App/Code/yourtool//lib/helltool/mailer.rb:327:in `<main>'
org/jruby/RubyKernel.java:961:in `require'
好奇我可以做些什么让它发挥作用?