我从ActiveMerchant库的JRuby包装中收到以下错误:
org.jruby.exceptions.RaiseException: (NameError) uninitialized constant ActiveMerchant::Billing::SecurePayAuGateway
at org.jruby.RubyModule.const_missing(org/jruby/RubyModule.java:3345)
at org.jruby.RubyModule.const_get(org/jruby/RubyModule.java:3290)
at RUBY.createGateway(classpath:/scripts/main.rb:79)
启动它的代码是:
gateway = ActiveMerchant::Billing::const_get(name).new(options)
我认为这种情况正在发生,因为网关中发生了一些动态的网关加载.rb:
module ActiveMerchant
module Billing
load_path = Pathname.new(__FILE__ + '/../../..')
Dir[File.dirname(__FILE__) + '/gateways/**/*.rb'].each do |filename|
gateway_name = File.basename(filename, '.rb')
gateway_classname = "#{gateway_name}_gateway".camelize
gateway_filename = Pathname.new(filename).relative_path_from(load_path).sub_ext('')
autoload(gateway_classname, gateway_filename)
end
end
end
这在单元测试期间有效,因为Ruby文件是目标目录中的真实文件。但是在最终的应用程序中,Ruby文件包含在Jar中的Jar中。
任何人都知道为什么会这样,以及如何让它发挥作用?
答案 0 :(得分:0)
你想教什么网关?来自Active Merchant的github没有
ActiveMerchant::Billing::SecurePayAuGateway
但是有一个
ActiveMerchant::Billing::SecurePayGateway
并且
ActiveMerchant::Billing::SecurePayTechGateway
要测试,而不是
gateway = ActiveMerchant::Billing::const_get(name).new(options)
尝试
gateway = ActiveMerchant::Billing::SecurePayGateway
如果这样做,你知道问题是你的gateway =方法,你可以相应地解决这个问题